116 lines
3.8 KiB
HTML
116 lines
3.8 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Company Admin{% endblock %}
|
|
{% block content %}
|
|
<div class="container mt-4">
|
|
<h2>{{ company.name }} Administration</h2>
|
|
|
|
<!-- Groups Management Section -->
|
|
<div class="card mt-3">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<span>Groups</span>
|
|
<a href="{{ url_for('create_group_page', company_id=company.id) }}" class="btn btn-sm btn-primary">Create Group</a>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="list-group" id="groupList">
|
|
{% for group in groups %}
|
|
<div class="list-group-item d-flex justify-content-between align-items-center">
|
|
<div>
|
|
<h5 class="mb-1">{{ group.name }}</h5>
|
|
<small class="text-muted">
|
|
{% if group.user_ids %}
|
|
Members: {{ group.user_ids|json_parse|length }}
|
|
{% else %}
|
|
No members
|
|
{% endif %}
|
|
</small>
|
|
</div>
|
|
<div>
|
|
<a href="{{ url_for('group_members_page', group_id=group.id) }}" class="btn btn-sm btn-secondary">Manage Members</a>
|
|
<button type="button" class="btn btn-sm btn-danger" onclick="deleteGroup({{ group.id }}, '{{ group.name }}')">Delete</button>
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<div class="alert alert-info">No groups found. Create one to organize your users.</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Invite Users Section -->
|
|
<div class="card mt-3">
|
|
<div class="card-header">Invite Users</div>
|
|
<div class="card-body">
|
|
<form method="POST">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
|
|
<div class="input-group">
|
|
<input type="email" name="email" class="form-control" placeholder="Enter email to invite" required>
|
|
<button type="submit" class="btn btn-primary">Send Invitation</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Active Invitations -->
|
|
<div class="card mt-3">
|
|
<div class="card-header">Active Invitations</div>
|
|
<ul class="list-group list-group-flush">
|
|
{% for invite in invitations %}
|
|
<li class="list-group-item">
|
|
{{ invite.email }} - Expires {{ invite.expires_at|datetimeformat }}
|
|
</li>
|
|
{% else %}
|
|
<li class="list-group-item">No active invitations</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- Company Users -->
|
|
<div class="card mt-3">
|
|
<div class="card-header">Company Users</div>
|
|
<ul class="list-group list-group-flush">
|
|
{% for user in users %}
|
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
<div>
|
|
{{ user.email }}
|
|
{% if user.invited_by %}
|
|
<small class="text-muted">(Invited by {{ user.invited_by.email }})</small>
|
|
{% else %}
|
|
<small class="text-muted">(Self-registered)</small>
|
|
{% endif %}
|
|
</div>
|
|
<div>
|
|
{% if user.is_company_admin %}
|
|
<span class="badge bg-primary">Admin</span>
|
|
{% endif %}
|
|
</div>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
|
|
<script>
|
|
function deleteGroup(groupId, groupName) {
|
|
if (confirm(`Are you sure you want to delete the group "${groupName}"? This will also remove its resource permissions.`)) {
|
|
fetch(`/api/delete-group/${groupId}`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'X-CSRF-Token': document.querySelector('input[name="csrf_token"]').value
|
|
}
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
alert('Group deleted successfully');
|
|
location.reload();
|
|
} else {
|
|
alert('Error: ' + data.error);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('Error:', error);
|
|
alert('Error deleting group');
|
|
});
|
|
}
|
|
}
|
|
</script>
|
|
{% endblock %} |