# Generated by Django 4.1.13 on 2024-05-09 03:16

import common.db.encoder
from django.db import migrations, models
import django.db.models.deletion
import tickets.models.ticket.general
import uuid


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('terminal', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='ApprovalRule',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('level', models.SmallIntegerField(choices=[(1, 'One level'), (2, 'Two level')], default=1, verbose_name='Approve level')),
                ('strategy', models.CharField(choices=[('org_admin', 'Org admin'), ('custom_user', 'Custom user'), ('super_admin', 'Super admin'), ('super_org_admin', 'Super admin and org admin')], default='super_admin', max_length=64, verbose_name='Approve strategy')),
            ],
            options={
                'verbose_name': 'Ticket flow approval rule',
            },
        ),
        migrations.CreateModel(
            name='Comment',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('user_display', models.CharField(max_length=256, verbose_name='User display name')),
                ('body', models.TextField(verbose_name='Body')),
                ('type', models.CharField(choices=[('state', 'State'), ('common', 'common')], default='common', max_length=16, verbose_name='Type')),
                ('state', models.CharField(max_length=16, null=True)),
            ],
            options={
                'verbose_name': 'Comment',
                'ordering': ('date_created',),
            },
        ),
        migrations.CreateModel(
            name='Ticket',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('title', models.CharField(max_length=256, verbose_name='Title')),
                ('type', models.CharField(choices=[('general', 'General'), ('apply_asset', 'Apply for asset'), ('login_confirm', 'Login confirm'), ('command_confirm', 'Command confirm'), ('login_asset_confirm', 'Login asset confirm')], default='general', max_length=64, verbose_name='Type')),
                ('state', models.CharField(choices=[('all', 'All'), ('pending', 'Open'), ('closed', 'Cancel'), ('approved', 'Approved'), ('rejected', 'Rejected')], default='pending', max_length=16, verbose_name='State')),
                ('status', models.CharField(choices=[('open', 'Open'), ('closed', 'Finished')], default='open', max_length=16, verbose_name='Status')),
                ('approval_step', models.SmallIntegerField(choices=[(1, 'One level'), (2, 'Two level')], default=1, verbose_name='Approval step')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('rel_snapshot', models.JSONField(default=dict, verbose_name='Relation snapshot')),
                ('serial_num', models.CharField(max_length=128, null=True, verbose_name='Serial number')),
                ('meta', models.JSONField(default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, verbose_name='Meta')),
                ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
            ],
            options={
                'verbose_name': 'Ticket',
                'ordering': ('-date_created',),
            },
            bases=(tickets.models.ticket.general.StatusMixin, models.Model),
        ),
        migrations.CreateModel(
            name='TicketAssignee',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('state', models.CharField(choices=[('all', 'All'), ('pending', 'Open'), ('closed', 'Cancel'), ('approved', 'Approved'), ('rejected', 'Rejected')], default='pending', max_length=64)),
            ],
            options={
                'verbose_name': 'Ticket assignee',
            },
        ),
        migrations.CreateModel(
            name='ApplyAssetTicket',
            fields=[
                ('ticket_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tickets.ticket')),
                ('apply_permission_name', models.CharField(max_length=128, verbose_name='Permission name')),
                ('apply_accounts', models.JSONField(default=list, verbose_name='Apply accounts')),
                ('apply_actions', models.IntegerField(default=1, verbose_name='Actions')),
                ('apply_date_start', models.DateTimeField(null=True, verbose_name='Date start')),
                ('apply_date_expired', models.DateTimeField(null=True, verbose_name='Date expired')),
            ],
            options={
                'verbose_name': 'Apply Asset Ticket',
            },
            bases=('tickets.ticket',),
        ),
        migrations.CreateModel(
            name='ApplyCommandTicket',
            fields=[
                ('ticket_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tickets.ticket')),
                ('apply_run_asset', models.CharField(max_length=128, verbose_name='Run asset')),
                ('apply_run_command', models.CharField(max_length=4096, verbose_name='Run command')),
                ('apply_run_account', models.CharField(default='', max_length=128, verbose_name='Account')),
            ],
            options={
                'verbose_name': 'Apply Command Ticket',
            },
            bases=('tickets.ticket',),
        ),
        migrations.CreateModel(
            name='ApplyLoginAssetTicket',
            fields=[
                ('ticket_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tickets.ticket')),
                ('apply_login_account', models.CharField(default='', max_length=128, verbose_name='Login account')),
            ],
            options={
                'verbose_name': 'Apply Login Asset Ticket',
            },
            bases=('tickets.ticket',),
        ),
        migrations.CreateModel(
            name='ApplyLoginTicket',
            fields=[
                ('ticket_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='tickets.ticket')),
                ('apply_login_ip', models.GenericIPAddressField(null=True, verbose_name='Login IP')),
                ('apply_login_city', models.CharField(max_length=64, null=True, verbose_name='Login city')),
                ('apply_login_datetime', models.DateTimeField(null=True, verbose_name='Login Date')),
            ],
            options={
                'verbose_name': 'Apply Login Ticket',
            },
            bases=('tickets.ticket',),
        ),
        migrations.CreateModel(
            name='TicketStep',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('level', models.SmallIntegerField(choices=[(1, 'One level'), (2, 'Two level')], default=1, verbose_name='Approve level')),
                ('state', models.CharField(choices=[('pending', 'Pending'), ('closed', 'Closed'), ('approved', 'Approved'), ('rejected', 'Rejected')], default='pending', max_length=64, verbose_name='State')),
                ('status', models.CharField(choices=[('active', 'Active'), ('closed', 'Closed'), ('pending', 'Pending')], default='pending', max_length=16)),
                ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticket_steps', to='tickets.ticket', verbose_name='Ticket')),
            ],
            options={
                'verbose_name': 'Ticket step',
            },
        ),
        migrations.CreateModel(
            name='TicketSession',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('session', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, related_name='ticket_relation', to='terminal.session')),
                ('ticket', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, related_name='session_relation', to='tickets.ticket')),
            ],
            options={
                'verbose_name': 'Ticket session relation',
            },
        ),
        migrations.CreateModel(
            name='TicketFlow',
            fields=[
                ('created_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by')),
                ('updated_by', models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by')),
                ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
                ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
                ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
                ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
                ('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
                ('type', models.CharField(choices=[('general', 'General'), ('apply_asset', 'Apply for asset'), ('login_confirm', 'Login confirm'), ('command_confirm', 'Command confirm'), ('login_asset_confirm', 'Login asset confirm')], default='general', max_length=64, verbose_name='Type')),
                ('approval_level', models.SmallIntegerField(choices=[(1, 'One level'), (2, 'Two level')], default=1, verbose_name='Approve level')),
                ('rules', models.ManyToManyField(related_name='ticket_flows', to='tickets.approvalrule')),
            ],
            options={
                'verbose_name': 'Ticket flow',
            },
        ),
    ]
