Implement univis key
This commit is contained in:
parent
dd9d3565ed
commit
5b67afeec4
@ -3,19 +3,12 @@ from django.contrib.auth.models import User
|
||||
|
||||
|
||||
# Create your models here.
|
||||
class Location(models.Model):
|
||||
name = models.CharField(max_length=16)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.name)
|
||||
|
||||
|
||||
class Building(models.Model):
|
||||
name = models.CharField(max_length=16)
|
||||
location = models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||
key = models.CharField(max_length=8, unique=True)
|
||||
address = models.CharField(max_length=32)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.name)
|
||||
return '{}'.format(self.key)
|
||||
|
||||
|
||||
class RoomType(models.Model):
|
||||
@ -25,85 +18,122 @@ class RoomType(models.Model):
|
||||
return '{}'.format(self.type)
|
||||
|
||||
|
||||
class BookingGroup(models.Model):
|
||||
name = models.CharField(max_length=64)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.name)
|
||||
|
||||
|
||||
#
|
||||
#
|
||||
# class BookingGroup(models.Model):
|
||||
# name = models.CharField(max_length=64)
|
||||
#
|
||||
# def __str__(self):
|
||||
# return '{}'.format(self.name)
|
||||
#
|
||||
#
|
||||
class Staff(models.Model):
|
||||
booking_group = models.ManyToManyField(BookingGroup)
|
||||
# username = personal_id
|
||||
# booking_group = models.ManyToManyField(BookingGroup)
|
||||
# username = ba - Nummer
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.user.username)
|
||||
return '{} {}'.format(self.user.first_name, self.user.last_name)
|
||||
|
||||
|
||||
class Room(models.Model):
|
||||
building = models.ForeignKey('Building', on_delete=models.CASCADE)
|
||||
room_number = models.CharField(max_length=16)
|
||||
capacity = models.IntegerField()
|
||||
seating = models.BooleanField()
|
||||
barrier_free = models.BooleanField()
|
||||
cooling = models.BooleanField()
|
||||
room_type = models.ForeignKey(RoomType, on_delete=models.PROTECT)
|
||||
floor = models.SmallIntegerField()
|
||||
admin = models.ForeignKey(BookingGroup, on_delete=models.SET_DEFAULT, default=1)
|
||||
service_staff = models.ForeignKey(Staff, on_delete=models.PROTECT)
|
||||
class OrgUnit(models.Model):
|
||||
title = models.CharField(max_length=32)
|
||||
|
||||
def __str__(self):
|
||||
return '{} - {}'.format(self.building.name, self.room_number)
|
||||
return '{}'.format(self.title)
|
||||
|
||||
|
||||
class Equipment(models.Model):
|
||||
univis_id = models.CharField(max_length=8)
|
||||
name = models.CharField(max_length=32)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.name)
|
||||
return '{}'.format(self.univis_id)
|
||||
|
||||
|
||||
class NumEquipment(models.Model):
|
||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
equipment = models.ForeignKey(Equipment, on_delete=models.CASCADE)
|
||||
count = models.SmallIntegerField()
|
||||
class Room(models.Model):
|
||||
building = models.ForeignKey('Building', on_delete=models.CASCADE, null=True, blank=True)
|
||||
room_number = models.CharField(max_length=16)
|
||||
capacity = models.IntegerField(null=True, blank=True)
|
||||
floor = models.SmallIntegerField(null=True, blank=True)
|
||||
univis_id = models.IntegerField(unique=True)
|
||||
univis_key = models.CharField(unique=True, max_length=64)
|
||||
room_type = models.ForeignKey(RoomType, on_delete=models.PROTECT, null=True, blank=True)
|
||||
# TODO: extract equipment
|
||||
description = models.CharField(max_length=64, null=True, blank=True)
|
||||
equipment = models.ManyToManyField(Equipment)
|
||||
|
||||
orgname = models.ForeignKey(OrgUnit, on_delete=models.PROTECT, related_name='orgname', null=True, blank=True)
|
||||
orgunits = models.ManyToManyField(OrgUnit)
|
||||
|
||||
# seating = models.BooleanField()
|
||||
# barrier_free = models.BooleanField()
|
||||
# cooling = models.BooleanField()
|
||||
|
||||
# admin = models.ForeignKey(BookingGroup, on_delete=models.SET_DEFAULT, default=1)
|
||||
# service_staff = models.ForeignKey(Staff, on_delete=models.PROTECT)
|
||||
|
||||
def __str__(self):
|
||||
return '{} - {} - {}'.format(self.room.room_number, self.equipment.name, self.count)
|
||||
if self.building == None:
|
||||
return '{}/{}'.format(None, self.room_number)
|
||||
else:
|
||||
return '{}/{} - {}'.format(self.building.key, self.room_number, self.orgname)
|
||||
|
||||
|
||||
class Booking(models.Model):
|
||||
DAY = 0
|
||||
WEEK = 1
|
||||
EVERY_TWO_WEEKS = 2
|
||||
MONTH = 3
|
||||
#
|
||||
# class NumEquipment(models.Model):
|
||||
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
# equipment = models.ForeignKey(Equipment, on_delete=models.CASCADE)
|
||||
# count = models.SmallIntegerField()
|
||||
#
|
||||
# def __str__(self):
|
||||
# return '{} - {} - {}'.format(self.room.room_number, self.equipment.name, self.count)
|
||||
#
|
||||
class Exclude_Term(models.Model):
|
||||
date = models.DateField()
|
||||
|
||||
TYPE_CHOICES = ((DAY, 'DAY'), (WEEK, 'WEEK'), (EVERY_TWO_WEEKS, 'EVERY_TWO_WEEKS'), (MONTH, 'MONTH'))
|
||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
||||
start_date = models.DateField()
|
||||
end_date = models.DateField()
|
||||
start_time = models.TimeField()
|
||||
end_time = models.TimeField()
|
||||
intervall = models.IntegerField(choices=TYPE_CHOICES)
|
||||
# class Lecture_Term(models.Model):
|
||||
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
# start_date = models.DateField()
|
||||
# end_date = models.DateField()
|
||||
# start_time = models.TimeField()
|
||||
# end_time = models.TimeField()
|
||||
# repeat_intervall = models.IntegerField()
|
||||
# excludes = models.ManyToManyField(Exclude_Term)
|
||||
# # TODO: Help please
|
||||
# exclude_vacation = models.BooleanField()
|
||||
|
||||
def __str__(self):
|
||||
return '{} - {} - {}'.format(self.room.room_number, self.start_date.strftime('%Y - %m - %d'),
|
||||
self.end_date.strftime('%Y - %m - %d'))
|
||||
|
||||
|
||||
class AccessPoint(models.Model):
|
||||
mac_address = models.CharField(max_length=12)
|
||||
rooms = models.ManyToManyField(Room)
|
||||
|
||||
def __str__(self):
|
||||
return '{}'.format(self.mac_address)
|
||||
|
||||
|
||||
class Favorite(models.Model):
|
||||
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return '{} - {}'.format(self.staff.user.username, self.room.room_number)
|
||||
# class Booking(models.Model):
|
||||
# DAY = 0
|
||||
# WEEK = 1
|
||||
# EVERY_TWO_WEEKS = 2
|
||||
# MONTH = 3
|
||||
#
|
||||
# TYPE_CHOICES = ((DAY, 'DAY'), (WEEK, 'WEEK'), (EVERY_TWO_WEEKS, 'EVERY_TWO_WEEKS'), (MONTH, 'MONTH'))
|
||||
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
# staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
||||
# start_date = models.DateField()
|
||||
# end_date = models.DateField()
|
||||
# start_time = models.TimeField()
|
||||
# end_time = models.TimeField()
|
||||
# intervall = models.IntegerField(choices=TYPE_CHOICES)
|
||||
#
|
||||
# def __str__(self):
|
||||
# return '{} - {} - {}'.format(self.room.room_number, self.start_date.strftime('%Y - %m - %d'),
|
||||
# self.end_date.strftime('%Y - %m - %d'))
|
||||
#
|
||||
#
|
||||
# class AccessPoint(models.Model):
|
||||
# mac_address = models.CharField(max_length=12)
|
||||
# rooms = models.ManyToManyField(Room)
|
||||
#
|
||||
# def __str__(self):
|
||||
# return '{}'.format(self.mac_address)
|
||||
#
|
||||
#
|
||||
# class Favorite(models.Model):
|
||||
# staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
||||
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||
#
|
||||
# def __str__(self):
|
||||
# return '{} - {}'.format(self.staff.user.username, self.room.room_number)
|
||||
|
||||
169
roofis2/roomservice/utils/migrate_data_rooms.py
Normal file
169
roofis2/roomservice/utils/migrate_data_rooms.py
Normal file
@ -0,0 +1,169 @@
|
||||
import json
|
||||
from pprint import pprint
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from roomservice.models import Room, Building, RoomType, OrgUnit, Equipment
|
||||
from .parser import univis_rooms_parser
|
||||
from .parser import univis_lectures_parser
|
||||
import ast
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# CONFIG Fakultaet
|
||||
FAKULTAET_GuK = "Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften"
|
||||
FAKULTAET_SoWi = "Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften"
|
||||
FAKULTAET_HuWi = "Fakult%E4t%20Humanwissenschaften"
|
||||
FAKULTAET_WIAI = "Fakult%E4t%20Wirtschaftsinformatik"
|
||||
|
||||
# CONFIG Locations
|
||||
RZ = "http://univis.uni-bamberg.de/prg?search=rooms&name=rz&show=xml"
|
||||
WEBEREI = "http://univis.uni-bamberg.de/prg?search=rooms&name=we&show=xml"
|
||||
FEKI = "http://univis.uni-bamberg.de/prg?search=rooms&name=f&show=xml"
|
||||
MARKUSHAUS = "http://univis.uni-bamberg.de/prg?search=rooms&name=m&show=xml"
|
||||
UNIVERSITAET = "http://univis.uni-bamberg.de/prg?search=rooms&name=u&show=xml"
|
||||
KAPUZINERSTR = "http://univis.uni-bamberg.de/prg?search=rooms&name=k&show=xml"
|
||||
ZWINGER = "http://univis.uni-bamberg.de/prg?search=rooms&name=z&show=xml"
|
||||
AULA = "http://univis.uni-bamberg.de/prg?search=rooms&name=a&show=xml"
|
||||
|
||||
|
||||
# CONFIG ROOMS
|
||||
def univis_rooms(fakultaet):
|
||||
return "http://univis.uni-bamberg.de/prg?search=rooms&department=" + fakultaet + "&show=xml"
|
||||
|
||||
|
||||
# CONFIG LECTURES
|
||||
def univis_lectures(fakultaet):
|
||||
return "http://univis.uni-bamberg.de/prg?search=lectures&department=" + fakultaet + "&show=exml"
|
||||
|
||||
|
||||
def univis_rooms_loc(kuerzel):
|
||||
return "http://univis.uni-bamberg.de/prg?search=rooms&name=" + kuerzel + "&show=xml"
|
||||
|
||||
|
||||
def getJsonFromFile(path):
|
||||
with open(path, "r") as file:
|
||||
return json.load(file)
|
||||
|
||||
|
||||
def writeUnivisRoomDataInDB(rooms):
|
||||
for room in rooms:
|
||||
try:
|
||||
building = None
|
||||
if 'address' in room and 'buildingkey' in room:
|
||||
building_address = room['address']
|
||||
building_key = room['buildingkey']
|
||||
building, _ = Building.objects.get_or_create(key=building_key, address=building_address)
|
||||
|
||||
short = str(room['short']).split(sep='/')[-1]
|
||||
univis_id = room['id']
|
||||
univis_key = room['@key']
|
||||
|
||||
capacity = None
|
||||
if 'size' in room:
|
||||
capacity = room['size']
|
||||
|
||||
floor = None
|
||||
if 'floor' in room:
|
||||
floor = room['floor']
|
||||
|
||||
room_type = None
|
||||
if 'name' in room:
|
||||
room_type, _ = RoomType.objects.get_or_create(type=room['name'])
|
||||
|
||||
description = None
|
||||
if 'description' in room:
|
||||
description = room['description']
|
||||
|
||||
orgname = None
|
||||
if 'orgname' in room:
|
||||
orgname, _ = OrgUnit.objects.get_or_create(title=room['orgname'])
|
||||
|
||||
room_db_obj, _ = Room.objects.update_or_create(building=building,
|
||||
room_number=short,
|
||||
capacity=capacity,
|
||||
floor=floor,
|
||||
univis_id=univis_id,
|
||||
univis_key=univis_key,
|
||||
room_type=room_type,
|
||||
description=description,
|
||||
orgname=orgname)
|
||||
|
||||
equipment_options = Equipment.objects.all()
|
||||
for equipment in equipment_options:
|
||||
univis_id = equipment.univis_id.lower()
|
||||
if univis_id in room and room[univis_id] == 'ja':
|
||||
room_db_obj.equipment.add(equipment)
|
||||
|
||||
orgunits = None
|
||||
if 'orgunits' in room:
|
||||
for orgunit in room['orgunits']:
|
||||
if len(orgunit) > 0:
|
||||
for orgunit in str(room['orgunits']['orgunit']).strip("[]").split(','):
|
||||
cleaned_orgunit = orgunit.strip().strip("'").strip("'")
|
||||
orgunit, _ = OrgUnit.objects.get_or_create(title=cleaned_orgunit)
|
||||
room_db_obj.orgunits.add(orgunit)
|
||||
|
||||
# TODO: Check xml syntax #orgunit problem
|
||||
pass
|
||||
else:
|
||||
orgunit, _ = OrgUnit.objects.get_or_create(title=orgunit)
|
||||
room_db_obj.orgunits.add(orgunit)
|
||||
|
||||
# room_db_obj.save()
|
||||
logger.info('ROOM: {}'.format(room_db_obj.room_number))
|
||||
|
||||
|
||||
except IntegrityError as err:
|
||||
logger.warning(err)
|
||||
logger.warning('Room already exists')
|
||||
|
||||
|
||||
def delete():
|
||||
rooms = Room.objects.all()
|
||||
logger.info("Deleted following Rooms:")
|
||||
for room in rooms:
|
||||
logger.info("Room: {name}".format(
|
||||
name=room.short)
|
||||
)
|
||||
room.delete()
|
||||
|
||||
|
||||
def main():
|
||||
# get food jsons
|
||||
logger.info("\nStart:\nRoom: {}\nOrgunits: {}\nBuildings: {}\nRoomTypes: {}"
|
||||
.format(Room.objects.count(),
|
||||
OrgUnit.objects.count(),
|
||||
Building.objects.count(),
|
||||
RoomType.objects.count()))
|
||||
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_GuK)))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_SoWi)))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_HuWi)))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_WIAI)))
|
||||
writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("k")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("z")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("u")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("w")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("f")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("r")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("h")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("l")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("m")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("o")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("p")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("v")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("w")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("d")))
|
||||
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("x")))
|
||||
|
||||
logger.info("\nFinished:\nRoom: {}\nOrgunits: {}\nBuildings: {}\nRoomTypes: {}"
|
||||
.format(Room.objects.count(),
|
||||
OrgUnit.objects.count(),
|
||||
Building.objects.count(),
|
||||
RoomType.objects.count()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user