Coverage for modules\team\migrations\0001_initial.py: 100%

10 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 09:24 +0800

1# Generated by Django 5.1.15 on 2026-09-01 13:46 

2 

3import django.db.models.deletion 

4import django.utils.timezone 

5import secrets 

6import uuid 

7from django.conf import settings 

8from django.db import migrations, models 

9 

10 

11class Migration(migrations.Migration): 

12 

13 initial = True 

14 

15 dependencies = [ 

16 migrations.swappable_dependency(settings.AUTH_USER_MODEL), 

17 ] 

18 

19 operations = [ 

20 migrations.CreateModel( 

21 name='AttendanceLog', 

22 fields=[ 

23 ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), 

24 ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), 

25 ('updated_at', models.DateTimeField(auto_now=True)), 

26 ('tenant_id', models.UUIDField(db_index=True, help_text='Organization / Tenant ID')), 

27 ('check_in', models.DateTimeField(default=django.utils.timezone.now)), 

28 ('check_out', models.DateTimeField(blank=True, null=True)), 

29 ('status', models.CharField(choices=[('CLOCKED_IN', 'Clocked In'), ('CLOCKED_OUT', 'Clocked Out')], default='CLOCKED_IN', max_length=32)), 

30 ('notes', models.TextField(blank=True, null=True)), 

31 ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendance_logs', to=settings.AUTH_USER_MODEL)), 

32 ], 

33 options={ 

34 'ordering': ['-check_in'], 

35 }, 

36 ), 

37 migrations.CreateModel( 

38 name='Department', 

39 fields=[ 

40 ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), 

41 ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), 

42 ('updated_at', models.DateTimeField(auto_now=True)), 

43 ('tenant_id', models.UUIDField(db_index=True, help_text='Organization / Tenant ID')), 

44 ('name', models.CharField(max_length=128)), 

45 ('code', models.CharField(max_length=32)), 

46 ('description', models.TextField(blank=True, null=True)), 

47 ('manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_departments', to=settings.AUTH_USER_MODEL)), 

48 ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sub_departments', to='team.department')), 

49 ], 

50 options={ 

51 'ordering': ['name'], 

52 'unique_together': {('tenant_id', 'code')}, 

53 }, 

54 ), 

55 migrations.CreateModel( 

56 name='Invitation', 

57 fields=[ 

58 ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), 

59 ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), 

60 ('updated_at', models.DateTimeField(auto_now=True)), 

61 ('tenant_id', models.UUIDField(db_index=True, help_text='Organization / Tenant ID')), 

62 ('email', models.EmailField(max_length=255)), 

63 ('role', models.CharField(default='MEMBER', max_length=32)), 

64 ('token', models.CharField(default=secrets.token_urlsafe, max_length=64, unique=True)), 

65 ('status', models.CharField(choices=[('PENDING', 'Pending'), ('ACCEPTED', 'Accepted'), ('EXPIRED', 'Expired')], default='PENDING', max_length=32)), 

66 ('expires_at', models.DateTimeField()), 

67 ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='team.department')), 

68 ('invited_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_invitations', to=settings.AUTH_USER_MODEL)), 

69 ], 

70 options={ 

71 'abstract': False, 

72 }, 

73 ), 

74 migrations.CreateModel( 

75 name='TeamMember', 

76 fields=[ 

77 ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), 

78 ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)), 

79 ('updated_at', models.DateTimeField(auto_now=True)), 

80 ('tenant_id', models.UUIDField(db_index=True, help_text='Organization / Tenant ID')), 

81 ('job_title', models.CharField(blank=True, max_length=128, null=True)), 

82 ('role', models.CharField(choices=[('OWNER', 'Owner'), ('ADMIN', 'Administrator'), ('MANAGER', 'Manager'), ('MEMBER', 'Member'), ('GUEST', 'Guest')], default='MEMBER', max_length=32)), 

83 ('status', models.CharField(choices=[('ACTIVE', 'Active'), ('INVITED', 'Invited'), ('SUSPENDED', 'Suspended')], default='ACTIVE', max_length=32)), 

84 ('joined_at', models.DateTimeField(default=django.utils.timezone.now)), 

85 ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='members', to='team.department')), 

86 ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='team_profiles', to=settings.AUTH_USER_MODEL)), 

87 ], 

88 options={ 

89 'ordering': ['-joined_at'], 

90 'unique_together': {('tenant_id', 'user')}, 

91 }, 

92 ), 

93 ]