feat(pricing): add workspace user rates and price units

This commit is contained in:
2026-04-26 10:19:04 +03:30
parent f960ca8221
commit fadf898486
19 changed files with 731 additions and 266 deletions

View File

@@ -33,6 +33,10 @@ from apps.workspaces.services.permissions import (
has_project_capability,
has_workspace_capability,
)
from apps.workspaces.services.rates import (
upsert_workspace_user_rate,
update_workspace_user_rate,
)
__all__ = [
"WORKSPACE_VIEW",
@@ -68,4 +72,6 @@ __all__ = [
"can_manage_workspace_members",
"can_assign_workspace_role",
"can_change_workspace_membership",
"upsert_workspace_user_rate",
"update_workspace_user_rate",
]

View File

@@ -0,0 +1,54 @@
from django.utils import timezone
from apps.workspaces.models import WorkspaceUserRate
def upsert_workspace_user_rate(workspace, user_id, hourly_rate, currency="USD"):
currency = currency.upper()
rate = WorkspaceUserRate.objects.filter(
workspace=workspace,
user_id=user_id,
is_deleted=False,
).first()
if rate:
update_fields = []
if rate.hourly_rate != hourly_rate:
rate.hourly_rate = hourly_rate
update_fields.append("hourly_rate")
if rate.currency != currency:
rate.currency = currency
update_fields.append("currency")
if not rate.is_active:
rate.is_active = True
update_fields.append("is_active")
if update_fields:
update_fields.append("updated_at")
rate.save(update_fields=update_fields)
return rate
return WorkspaceUserRate.objects.create(
workspace=workspace,
user_id=user_id,
hourly_rate=hourly_rate,
currency=currency,
effective_from=timezone.now(),
is_active=True,
)
def update_workspace_user_rate(rate_instance, **kwargs):
if "currency" in kwargs and kwargs["currency"]:
kwargs["currency"] = kwargs["currency"].upper()
update_fields = []
for field, value in kwargs.items():
if hasattr(rate_instance, field) and getattr(rate_instance, field) != value:
setattr(rate_instance, field, value)
update_fields.append(field)
if update_fields:
update_fields.append("updated_at")
rate_instance.save(update_fields=update_fields)
return rate_instance