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.
|
# 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):
|
class Building(models.Model):
|
||||||
name = models.CharField(max_length=16)
|
key = models.CharField(max_length=8, unique=True)
|
||||||
location = models.ForeignKey(Location, on_delete=models.CASCADE)
|
address = models.CharField(max_length=32)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{}'.format(self.name)
|
return '{}'.format(self.key)
|
||||||
|
|
||||||
|
|
||||||
class RoomType(models.Model):
|
class RoomType(models.Model):
|
||||||
@ -25,85 +18,122 @@ class RoomType(models.Model):
|
|||||||
return '{}'.format(self.type)
|
return '{}'.format(self.type)
|
||||||
|
|
||||||
|
|
||||||
class BookingGroup(models.Model):
|
#
|
||||||
name = models.CharField(max_length=64)
|
#
|
||||||
|
# class BookingGroup(models.Model):
|
||||||
def __str__(self):
|
# name = models.CharField(max_length=64)
|
||||||
return '{}'.format(self.name)
|
#
|
||||||
|
# def __str__(self):
|
||||||
|
# return '{}'.format(self.name)
|
||||||
|
#
|
||||||
|
#
|
||||||
class Staff(models.Model):
|
class Staff(models.Model):
|
||||||
booking_group = models.ManyToManyField(BookingGroup)
|
# booking_group = models.ManyToManyField(BookingGroup)
|
||||||
# username = personal_id
|
# username = ba - Nummer
|
||||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{}'.format(self.user.username)
|
return '{} {}'.format(self.user.first_name, self.user.last_name)
|
||||||
|
|
||||||
|
|
||||||
class Room(models.Model):
|
class OrgUnit(models.Model):
|
||||||
building = models.ForeignKey('Building', on_delete=models.CASCADE)
|
title = models.CharField(max_length=32)
|
||||||
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)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{} - {}'.format(self.building.name, self.room_number)
|
return '{}'.format(self.title)
|
||||||
|
|
||||||
|
|
||||||
class Equipment(models.Model):
|
class Equipment(models.Model):
|
||||||
|
univis_id = models.CharField(max_length=8)
|
||||||
name = models.CharField(max_length=32)
|
name = models.CharField(max_length=32)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{}'.format(self.name)
|
return '{}'.format(self.univis_id)
|
||||||
|
|
||||||
|
|
||||||
class NumEquipment(models.Model):
|
class Room(models.Model):
|
||||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
building = models.ForeignKey('Building', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
equipment = models.ForeignKey(Equipment, on_delete=models.CASCADE)
|
room_number = models.CharField(max_length=16)
|
||||||
count = models.SmallIntegerField()
|
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):
|
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
|
# class NumEquipment(models.Model):
|
||||||
WEEK = 1
|
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||||
EVERY_TWO_WEEKS = 2
|
# equipment = models.ForeignKey(Equipment, on_delete=models.CASCADE)
|
||||||
MONTH = 3
|
# 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'))
|
# class Lecture_Term(models.Model):
|
||||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||||
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
# start_date = models.DateField()
|
||||||
start_date = models.DateField()
|
# end_date = models.DateField()
|
||||||
end_date = models.DateField()
|
# start_time = models.TimeField()
|
||||||
start_time = models.TimeField()
|
# end_time = models.TimeField()
|
||||||
end_time = models.TimeField()
|
# repeat_intervall = models.IntegerField()
|
||||||
intervall = models.IntegerField(choices=TYPE_CHOICES)
|
# excludes = models.ManyToManyField(Exclude_Term)
|
||||||
|
# # TODO: Help please
|
||||||
|
# exclude_vacation = models.BooleanField()
|
||||||
|
|
||||||
def __str__(self):
|
# class Booking(models.Model):
|
||||||
return '{} - {} - {}'.format(self.room.room_number, self.start_date.strftime('%Y - %m - %d'),
|
# DAY = 0
|
||||||
self.end_date.strftime('%Y - %m - %d'))
|
# WEEK = 1
|
||||||
|
# EVERY_TWO_WEEKS = 2
|
||||||
|
# MONTH = 3
|
||||||
class AccessPoint(models.Model):
|
#
|
||||||
mac_address = models.CharField(max_length=12)
|
# TYPE_CHOICES = ((DAY, 'DAY'), (WEEK, 'WEEK'), (EVERY_TWO_WEEKS, 'EVERY_TWO_WEEKS'), (MONTH, 'MONTH'))
|
||||||
rooms = models.ManyToManyField(Room)
|
# room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
||||||
|
# staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
||||||
def __str__(self):
|
# start_date = models.DateField()
|
||||||
return '{}'.format(self.mac_address)
|
# end_date = models.DateField()
|
||||||
|
# start_time = models.TimeField()
|
||||||
|
# end_time = models.TimeField()
|
||||||
class Favorite(models.Model):
|
# intervall = models.IntegerField(choices=TYPE_CHOICES)
|
||||||
staff = models.ForeignKey(Staff, on_delete=models.CASCADE)
|
#
|
||||||
room = models.ForeignKey(Room, on_delete=models.CASCADE)
|
# def __str__(self):
|
||||||
|
# return '{} - {} - {}'.format(self.room.room_number, self.start_date.strftime('%Y - %m - %d'),
|
||||||
def __str__(self):
|
# self.end_date.strftime('%Y - %m - %d'))
|
||||||
return '{} - {}'.format(self.staff.user.username, self.room.room_number)
|
#
|
||||||
|
#
|
||||||
|
# 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