175 lines
5.6 KiB
Python
Executable File
175 lines
5.6 KiB
Python
Executable File
# %%
|
|
PROJECT_PATH = '/home/md/Work/ligalytics/leagues_stable/'
|
|
import os, sys
|
|
sys.path.insert(0, PROJECT_PATH)
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "leagues.settings")
|
|
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
|
|
|
|
from leagues import settings
|
|
# settings.DATABASES['default']['NAME'] = PROJECT_PATH+'/db.sqlite3'
|
|
settings.DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'
|
|
settings.DATABASES['default']['HOST'] = '0.0.0.0'
|
|
settings.DATABASES['default']['PORT'] = '5432'
|
|
settings.DATABASES['default']['USER'] = 'postgres'
|
|
settings.DATABASES['default']['PASSWORD'] = 'secret123'
|
|
settings.DATABASES['default']['NAME'] = 'mypgsqldb'
|
|
settings.DATABASES['default']['ATOMIC_REQUESTS'] = False
|
|
settings.DATABASES['default']['AUTOCOMMIT'] = True
|
|
settings.DATABASES['default']['CONN_MAX_AGE'] = 0
|
|
settings.DATABASES['default']['CONN_HEALTH_CHECKS'] = False
|
|
settings.DATABASES['default']['OPTIONS'] = {}
|
|
|
|
os.environ["XPRESSDIR"] = "/opt/xpressmp"
|
|
os.environ["XPRESS"] = "/opt/xpressmp/bin"
|
|
os.environ["LD_LIBRARY_PATH"] = os.environ["XPRESSDIR"] + "/lib"
|
|
os.environ["DYLD_LIBRARY_PATH"] = os.environ["XPRESSDIR"] + "/lib"
|
|
os.environ["SHLIB_PATH"] = os.environ["XPRESSDIR"] + "/lib"
|
|
os.environ["LIBPATH"] = os.environ["XPRESSDIR"] + "/lib"
|
|
os.environ["PYTHONPATH"] = os.environ["XPRESSDIR"] + "/lib"
|
|
os.environ["CLASSPATH"] = os.environ["XPRESSDIR"] + "/lib/xprs.jar"
|
|
os.environ["CLASSPATH"] = os.environ["XPRESSDIR"] + "/lib/xprb.jar" + os.pathsep + os.environ["CLASSPATH"]
|
|
os.environ["CLASSPATH"] = os.environ["XPRESSDIR"] + "/lib/xprm.jar" + os.pathsep + os.environ["CLASSPATH"]
|
|
os.environ["PATH"] = os.environ["XPRESSDIR"] + "/bin" + os.pathsep + os.environ["PATH"]
|
|
|
|
|
|
import django
|
|
django.setup()
|
|
|
|
from scheduler.models import *
|
|
import pulp
|
|
from pulp import lpSum, value, XPRESS, GUROBI, PULP_CBC_CMD
|
|
from django.db.models import Q
|
|
from django.template.loader import render_to_string
|
|
|
|
from qualifiers.models import *
|
|
from common.models import GlobalTeam, GlobalCountry
|
|
from scheduler.models import Season, Scenario, Team, DayObj, CountryClash, Country
|
|
|
|
from qualifiers.draws import groupTeams, optimize_inversions4
|
|
from scheduler.solver.tasks.optimize import optimize
|
|
|
|
import random
|
|
import time
|
|
import json
|
|
import csv
|
|
import networkx as nx
|
|
import matplotlib.pyplot as plt
|
|
from datetime import timedelta
|
|
# %%
|
|
|
|
from django.contrib.sessions.models import Session
|
|
|
|
scenario = Scenario.objects.get(id=8506)
|
|
season = scenario.season
|
|
days = Day.objects.filter(season=scenario.season)
|
|
teams = Team.objects.filter(season=scenario.season)
|
|
federation = FederationMember.objects.filter(season=scenario.season).first().federation
|
|
stadiums = Stadium.objects.filter(federation=federation)
|
|
stadiumtimeslotblockings = StadiumTimeSlotBlocking.objects.filter(stadiumTimeSlot__stadium__in=stadiums)
|
|
|
|
# %%
|
|
|
|
getTeamByName = {}
|
|
for t in teams:
|
|
|
|
if t.name == "AHOUD Devils Nijmegen U9":
|
|
name = "Nijmegen Devils"
|
|
elif t.name == "Unis Flyers Heerenveen U7/U9/U11":
|
|
name="UNIS Flyers Heerenveen"
|
|
elif t.name == "IJCU Utrecht U9/U11":
|
|
name="Utrecht Dragons"
|
|
else:
|
|
name = t.name.split("U7")[0].split("U9")[0].split("U11")[0].strip()
|
|
getTeamByName[name] = t
|
|
|
|
getStadiumByName = {}
|
|
for s in stadiums:
|
|
if s.name == "IJssportcentrum Eindhoven (kleine hal)":
|
|
name = "IJssportcentrum Eindhoven (Kleine hal)"
|
|
elif s.name == "Sportiom":
|
|
name = "Den Bosch"
|
|
else:
|
|
name = s.name
|
|
getStadiumByName[name] = s
|
|
|
|
|
|
# %%
|
|
|
|
stsb = []
|
|
with open('LOS-ScheduleImportTemplate_EN-U9.csv', newline='') as csvfile:
|
|
reader = csv.reader(csvfile)
|
|
next(reader, None)
|
|
next(reader, None)
|
|
for row in reader:
|
|
# print(row)
|
|
|
|
raw_dayobj = datetime.datetime.strptime(row[3],'%m/%d/%Y')
|
|
raw_time = row[4]
|
|
raw_stadium= row[7]
|
|
raw_team1 = row[8].split("U9")[0].strip()
|
|
raw_team2 = row[9].split("U9")[0].strip()
|
|
|
|
# day
|
|
day = days.filter(day=raw_dayobj.strftime('%Y-%m-%d')).first()
|
|
if not day:
|
|
print("\tERROR",day)
|
|
break
|
|
|
|
# teams
|
|
team1 = getTeamByName.get(raw_team1, None)
|
|
team2 = getTeamByName.get(raw_team2,None)
|
|
|
|
if not team1 or not team2:
|
|
print("\tERROR",team1,team2)
|
|
break
|
|
|
|
# stadium
|
|
stadium = None
|
|
for s in getStadiumByName.keys():
|
|
if raw_stadium in s:
|
|
stadium = getStadiumByName[s]
|
|
break
|
|
|
|
if not stadium:
|
|
print("\tERROR",stadium)
|
|
break
|
|
|
|
# timeslot
|
|
weekday = raw_dayobj.strftime('%A')+"s"
|
|
start = datetime.time(int(raw_time.split(":")[0]),int(raw_time.split(":")[1]))
|
|
end = datetime.time(int(raw_time.split(":")[0])+2 % 24,int(raw_time.split(":")[1]))
|
|
timeslot = StadiumTimeSlot.objects.filter(stadium=stadium,weekday=weekday,start=start,end=end)
|
|
if timeslot.count() > 1:
|
|
print("ERROR",stadium,weekday,start,end)
|
|
break
|
|
else:
|
|
timeslot = timeslot.first()
|
|
if not timeslot:
|
|
club = StadiumTimeSlot.objects.filter(stadium=stadium).first().club
|
|
print("Missing",stadium,weekday,start,end)
|
|
timeslot = StadiumTimeSlot.objects.create(
|
|
stadium=stadium,
|
|
club=club,
|
|
weekday=weekday,
|
|
start=start,
|
|
end=end
|
|
)
|
|
|
|
|
|
|
|
stsb.append(StadiumTimeSlotBlocking(stadiumTimeSlot = timeslot,
|
|
homeTeam = team1,
|
|
awayTeam = team2,
|
|
day = day.day,
|
|
)
|
|
)
|
|
|
|
|
|
StadiumTimeSlotBlocking.objects.bulk_create(stsb)
|
|
|
|
# %%
|
|
|
|
|
|
|
|
|