96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
import os
|
|
from peewee import AutoField, Model, CharField, IntegerField, DateField, BooleanField, CompositeKey, DecimalField, ForeignKeyField, SQL, SqliteDatabase
|
|
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
db_file = 'database.sqlite'
|
|
|
|
db = SqliteDatabase(os.path.join(path, db_file))
|
|
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
db_file = 'database_empty.sqlite'
|
|
db = SqliteDatabase(os.path.join(path, db_file))
|
|
|
|
# class ChartType(Enum):
|
|
# DAY = "DAY"
|
|
# MONTH = "MONTH"
|
|
# YEAR = "YEAR"
|
|
|
|
class PPETable(Model):
|
|
id = CharField(primary_key=True)
|
|
ppe = CharField(unique=True)
|
|
tariffCode = CharField()
|
|
type = CharField()
|
|
name = CharField()
|
|
last_update_date = DateField(null=True)
|
|
is_active = BooleanField(default=True)
|
|
|
|
class Meta:
|
|
database = db
|
|
table_name = 'PPE'
|
|
constraints = [SQL('UNIQUE (ppe, tariffCode)')]
|
|
|
|
class MeterTable(Model):
|
|
id = AutoField() # Meter point
|
|
ppe_id = ForeignKeyField(PPETable, backref='zones')
|
|
meter_type = CharField()
|
|
last_update_date = DateField(null=True)
|
|
first_date = DateField(null=True)
|
|
|
|
class Meta:
|
|
database = db
|
|
table_name = 'METER'
|
|
constraints = [SQL('UNIQUE (ppe_id, meter_type)')]
|
|
|
|
class CounterTable(Model):
|
|
id = AutoField()
|
|
meter_id = ForeignKeyField(MeterTable, backref='meter')
|
|
tariff = CharField()
|
|
measurement_date = DateField(null=True)
|
|
meter_value = DecimalField(max_digits=15, decimal_places=5, null=True)
|
|
|
|
class Meta:
|
|
database = db
|
|
table_name = 'COUNTER'
|
|
|
|
class ChartTable(Model):
|
|
id = IntegerField()
|
|
meter_type = CharField()
|
|
year = IntegerField()
|
|
month = IntegerField(null=True)
|
|
day = IntegerField(null=True)
|
|
value =CharField()
|
|
|
|
class Meta:
|
|
database = db
|
|
table_name = 'CHART_CACHE'
|
|
primary_key = CompositeKey('id', 'year', 'month', 'day')
|
|
|
|
class MainChartTable(Model):
|
|
mp = CharField()
|
|
meter_type = CharField()
|
|
zone = IntegerField()
|
|
tm = IntegerField()
|
|
value = DecimalField(max_digits=20, decimal_places=16, null=True)
|
|
tarAvg = DecimalField(max_digits=20, decimal_places=16, null=True)
|
|
est = BooleanField(default=False)
|
|
cplt = BooleanField(default=False)
|
|
|
|
class Meta:
|
|
database = db
|
|
table_name = 'CHART'
|
|
primary_key = CompositeKey('mp', 'meter_type', 'zone', 'tm')
|
|
|
|
|
|
|
|
|
|
|
|
def databaseInit():
|
|
db.create_tables([PPETable], safe=True)
|
|
db.create_tables([MeterTable], safe=True)
|
|
db.create_tables([CounterTable], safe=True)
|
|
db.create_tables([ChartTable], safe=True)
|
|
db.create_tables([MainChartTable], safe=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
databaseInit() |