Extra commit for files in 'common'
- Add functionality to add a default dictionary for configuration fields - Correct entitlement processing - Remove get_template functionality from ModelVariables, define it directly with LLM model definition in configuration file.
This commit is contained in:
@@ -3,6 +3,7 @@ from sqlalchemy.sql.expression import text
|
||||
from common.extensions import db
|
||||
from datetime import datetime as dt, timezone as tz
|
||||
from enum import Enum
|
||||
from sqlalchemy import event
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
from dateutil.relativedelta import relativedelta
|
||||
@@ -50,6 +51,7 @@ class License(db.Model):
|
||||
tenant_id = db.Column(db.Integer, db.ForeignKey('public.tenant.id'), nullable=False)
|
||||
tier_id = db.Column(db.Integer, db.ForeignKey('public.license_tier.id'),nullable=False) # 'small', 'medium', 'custom'
|
||||
start_date = db.Column(db.Date, nullable=False)
|
||||
end_date = db.Column(db.Date, nullable=True)
|
||||
nr_of_periods = db.Column(db.Integer, nullable=False)
|
||||
currency = db.Column(db.String(20), nullable=False)
|
||||
yearly_payment = db.Column(db.Boolean, nullable=False, default=False)
|
||||
@@ -80,55 +82,26 @@ class License(db.Model):
|
||||
periods = db.relationship('LicensePeriod', back_populates='license',
|
||||
order_by='LicensePeriod.period_number',
|
||||
cascade='all, delete-orphan')
|
||||
|
||||
@hybrid_property
|
||||
def end_date(self):
|
||||
"""
|
||||
Berekent de einddatum van de licentie op basis van start_date en nr_of_periods.
|
||||
Elke periode is 1 maand, dus einddatum = startdatum + nr_of_periods maanden - 1 dag
|
||||
"""
|
||||
if self.start_date and self.nr_of_periods:
|
||||
return self.start_date + relativedelta(months=self.nr_of_periods) - relativedelta(days=1)
|
||||
return None
|
||||
|
||||
@end_date.expression
|
||||
def end_date(cls):
|
||||
"""
|
||||
SQL expressie versie van de end_date property voor gebruik in queries
|
||||
"""
|
||||
return db.func.date_add(
|
||||
db.func.date_add(
|
||||
cls.start_date,
|
||||
db.text(f'INTERVAL cls.nr_of_periods MONTH')
|
||||
),
|
||||
db.text('INTERVAL -1 DAY')
|
||||
)
|
||||
def calculate_end_date(start_date, nr_of_periods):
|
||||
"""Utility functie om einddatum te berekenen"""
|
||||
if start_date and nr_of_periods:
|
||||
return start_date + relativedelta(months=nr_of_periods) - relativedelta(days=1)
|
||||
return None
|
||||
|
||||
def update_configuration(self, **changes):
|
||||
"""
|
||||
Update license configuration
|
||||
These changes will only apply to future periods, not existing ones
|
||||
|
||||
Args:
|
||||
**changes: Dictionary of changes to apply to the license
|
||||
|
||||
Returns:
|
||||
None
|
||||
"""
|
||||
allowed_fields = [
|
||||
'tier_id', 'currency', 'basic_fee', 'max_storage_mb',
|
||||
'additional_storage_price', 'additional_storage_bucket',
|
||||
'included_embedding_mb', 'additional_embedding_price', 'additional_embedding_bucket',
|
||||
'included_interaction_tokens', 'additional_interaction_token_price',
|
||||
'additional_interaction_bucket', 'overage_embedding', 'overage_interaction',
|
||||
'additional_storage_allowed', 'additional_embedding_allowed',
|
||||
'additional_interaction_allowed'
|
||||
]
|
||||
|
||||
# Apply only allowed changes
|
||||
for key, value in changes.items():
|
||||
if key in allowed_fields:
|
||||
setattr(self, key, value)
|
||||
# Luister naar start_date wijzigingen
|
||||
@event.listens_for(License.start_date, 'set')
|
||||
def set_start_date(target, value, oldvalue, initiator):
|
||||
"""Bijwerken van end_date wanneer start_date wordt aangepast"""
|
||||
if value and target.nr_of_periods:
|
||||
target.end_date = calculate_end_date(value, target.nr_of_periods)
|
||||
|
||||
# Luister naar nr_of_periods wijzigingen
|
||||
@event.listens_for(License.nr_of_periods, 'set')
|
||||
def set_nr_of_periods(target, value, oldvalue, initiator):
|
||||
"""Bijwerken van end_date wanneer nr_of_periods wordt aangepast"""
|
||||
if value and target.start_date:
|
||||
target.end_date = calculate_end_date(target.start_date, value)
|
||||
|
||||
|
||||
class LicenseTier(db.Model):
|
||||
@@ -209,22 +182,22 @@ class LicensePeriod(db.Model):
|
||||
period_end = db.Column(db.Date, nullable=False)
|
||||
|
||||
# License configuration snapshot - copied from license when period is created
|
||||
currency = db.Column(db.String(20), nullable=False)
|
||||
basic_fee = db.Column(db.Float, nullable=False)
|
||||
max_storage_mb = db.Column(db.Integer, nullable=False)
|
||||
additional_storage_price = db.Column(db.Float, nullable=False)
|
||||
additional_storage_bucket = db.Column(db.Integer, nullable=False)
|
||||
included_embedding_mb = db.Column(db.Integer, nullable=False)
|
||||
additional_embedding_price = db.Column(db.Numeric(10, 4), nullable=False)
|
||||
additional_embedding_bucket = db.Column(db.Integer, nullable=False)
|
||||
included_interaction_tokens = db.Column(db.Integer, nullable=False)
|
||||
additional_interaction_token_price = db.Column(db.Numeric(10, 4), nullable=False)
|
||||
additional_interaction_bucket = db.Column(db.Integer, nullable=False)
|
||||
currency = db.Column(db.String(20), nullable=True)
|
||||
basic_fee = db.Column(db.Float, nullable=True)
|
||||
max_storage_mb = db.Column(db.Integer, nullable=True)
|
||||
additional_storage_price = db.Column(db.Float, nullable=True)
|
||||
additional_storage_bucket = db.Column(db.Integer, nullable=True)
|
||||
included_embedding_mb = db.Column(db.Integer, nullable=True)
|
||||
additional_embedding_price = db.Column(db.Numeric(10, 4), nullable=True)
|
||||
additional_embedding_bucket = db.Column(db.Integer, nullable=True)
|
||||
included_interaction_tokens = db.Column(db.Integer, nullable=True)
|
||||
additional_interaction_token_price = db.Column(db.Numeric(10, 4), nullable=True)
|
||||
additional_interaction_bucket = db.Column(db.Integer, nullable=True)
|
||||
|
||||
# Allowance flags - can be changed from False to True within a period
|
||||
additional_storage_allowed = db.Column(db.Boolean, nullable=False, default=False)
|
||||
additional_embedding_allowed = db.Column(db.Boolean, nullable=False, default=False)
|
||||
additional_interaction_allowed = db.Column(db.Boolean, nullable=False, default=False)
|
||||
additional_storage_allowed = db.Column(db.Boolean, nullable=True, default=False)
|
||||
additional_embedding_allowed = db.Column(db.Boolean, nullable=True, default=False)
|
||||
additional_interaction_allowed = db.Column(db.Boolean, nullable=True, default=False)
|
||||
|
||||
# Status tracking
|
||||
status = db.Column(db.Enum(PeriodStatus), nullable=False, default=PeriodStatus.UPCOMING)
|
||||
|
||||
Reference in New Issue
Block a user