This commit is contained in:
ilkeral
2025-08-08 07:24:25 +03:00
parent 342f1314c7
commit f4ee7a2d0b
29 changed files with 5189 additions and 1140 deletions

View File

@ -0,0 +1,57 @@
# Generated by Django 5.2.4 on 2025-07-24 19:21
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ssh_manager', '0012_sshcredential_connection_status_and_more'),
]
operations = [
migrations.CreateModel(
name='Invoice',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('invoice_number', models.CharField(max_length=50, unique=True, verbose_name='Fatura No')),
('issue_date', models.DateField(verbose_name='Düzenleme Tarihi')),
('due_date', models.DateField(verbose_name='Son Ödeme Tarihi')),
('status', models.CharField(choices=[('draft', 'Taslak'), ('sent', 'Gönderildi'), ('paid', 'Ödendi'), ('overdue', 'Gecikti'), ('cancelled', 'İptal Edildi')], default='draft', max_length=20, verbose_name='Durum')),
('payment_method', models.CharField(choices=[('bank_transfer', 'Banka Havalesi'), ('credit_card', 'Kredi Kartı'), ('cash', 'Nakit'), ('other', 'Diğer')], default='bank_transfer', max_length=20, verbose_name='Ödeme Yöntemi')),
('subtotal', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Ara Toplam')),
('tax_amount', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='KDV Tutarı')),
('total_amount', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Toplam Tutar')),
('discount', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='İndirim')),
('notes', models.TextField(blank=True, null=True, verbose_name='Notlar')),
('payment_notes', models.TextField(blank=True, null=True, verbose_name='Ödeme Notları')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Oluşturma Tarihi')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Güncelleme Tarihi')),
('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invoices', to='ssh_manager.customer', verbose_name='Müşteri')),
],
options={
'verbose_name': 'Fatura',
'verbose_name_plural': 'Faturalar',
'ordering': ['-issue_date', '-id'],
},
),
migrations.CreateModel(
name='InvoiceItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.CharField(max_length=255, verbose_name='ıklama')),
('quantity', models.DecimalField(decimal_places=2, default=1, max_digits=10, verbose_name='Miktar')),
('unit_price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Birim Fiyat')),
('tax_rate', models.DecimalField(decimal_places=2, default=18, max_digits=5, verbose_name='KDV Oranı (%)')),
('amount', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Tutar')),
('invoice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='ssh_manager.invoice', verbose_name='Fatura')),
('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ssh_manager.project', verbose_name='İlişkili Proje')),
],
options={
'verbose_name': 'Fatura Kalemi',
'verbose_name_plural': 'Fatura Kalemleri',
'ordering': ['id'],
},
),
]

View File

@ -0,0 +1,37 @@
# Generated by Django 5.2.4 on 2025-07-24 20:51
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('ssh_manager', '0013_invoice_invoiceitem'),
]
operations = [
migrations.RemoveField(
model_name='invoice',
name='discount',
),
migrations.RemoveField(
model_name='invoice',
name='subtotal',
),
migrations.RemoveField(
model_name='invoice',
name='tax_amount',
),
migrations.RemoveField(
model_name='invoiceitem',
name='quantity',
),
migrations.RemoveField(
model_name='invoiceitem',
name='tax_rate',
),
migrations.RemoveField(
model_name='invoiceitem',
name='unit_price',
),
]

View File

@ -0,0 +1,34 @@
# Generated by Django 5.2.4 on 2025-07-26 03:38
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ssh_manager', '0014_remove_invoice_discount_remove_invoice_subtotal_and_more'),
]
operations = [
migrations.CreateModel(
name='Backup',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('backup_type', models.CharField(choices=[('manual', 'Manuel'), ('auto', 'Otomatik'), ('scheduled', 'Zamanlanmış')], default='manual', max_length=20, verbose_name='Yedekleme Tipi')),
('status', models.CharField(choices=[('running', 'Devam Ediyor'), ('completed', 'Tamamlandı'), ('failed', 'Başarısız'), ('cancelled', 'İptal Edildi')], default='running', max_length=20, verbose_name='Durum')),
('start_time', models.DateTimeField(auto_now_add=True, verbose_name='Başlangıç Zamanı')),
('end_time', models.DateTimeField(blank=True, null=True, verbose_name='Bitiş Zamanı')),
('file_path', models.CharField(blank=True, max_length=500, null=True, verbose_name='Dosya Yolu')),
('file_size', models.CharField(blank=True, max_length=50, null=True, verbose_name='Dosya Boyutu')),
('error_message', models.TextField(blank=True, null=True, verbose_name='Hata Mesajı')),
('notes', models.TextField(blank=True, null=True, verbose_name='Notlar')),
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ssh_manager.project', verbose_name='Proje')),
],
options={
'verbose_name': 'Yedekleme',
'verbose_name_plural': 'Yedeklemeler',
'ordering': ['-start_time'],
},
),
]

View File

@ -0,0 +1,49 @@
# Generated by Django 5.2.4 on 2025-07-26 08:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ssh_manager', '0015_backup'),
]
operations = [
migrations.CreateModel(
name='SystemSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('backup_enabled', models.BooleanField(default=False, verbose_name='Otomatik Yedekleme Aktif')),
('backup_frequency', models.CharField(choices=[('daily', 'Günlük'), ('weekly', 'Haftalık'), ('monthly', 'Aylık')], default='weekly', max_length=10, verbose_name='Yedekleme Sıklığı')),
('backup_hour', models.IntegerField(default=3, verbose_name='Yedekleme Saati (0-23)')),
('backup_minute', models.IntegerField(default=0, verbose_name='Yedekleme Dakikası (0-59)')),
('backup_day_of_week', models.IntegerField(blank=True, default=0, null=True, verbose_name='Haftanın Günü (0=Pazartesi, 6=Pazar)')),
('backup_day_of_month', models.IntegerField(blank=True, default=1, null=True, verbose_name='Ayın Günü (1-31)')),
('backup_retention_days', models.IntegerField(default=30, verbose_name='Yedekleri Saklama Süresi (Gün)')),
('backup_crontab_expression', models.CharField(blank=True, max_length=100, null=True, verbose_name='Crontab İfadesi')),
('backup_compression', models.BooleanField(default=True, verbose_name='Sıkıştırma Kullan')),
('backup_format', models.CharField(default='tar.gz', max_length=10, verbose_name='Yedekleme Format')),
('ssh_key_path', models.CharField(blank=True, max_length=255, null=True, verbose_name='SSH Anahtar Yolu')),
('ssh_key_passphrase', models.CharField(blank=True, max_length=255, null=True, verbose_name='SSH Anahtar Parolası')),
('email_notifications', models.BooleanField(default=False, verbose_name='E-posta Bildirimleri')),
('notification_email', models.EmailField(blank=True, max_length=254, null=True, verbose_name='Bildirim E-postası')),
('backup_directory', models.CharField(default='/backups', max_length=255, verbose_name='Yedekleme Dizini')),
('use_s3_storage', models.BooleanField(default=False, verbose_name='S3 Depolama Kullan')),
('s3_access_key', models.CharField(blank=True, max_length=255, null=True, verbose_name='S3 Erişim Anahtarı')),
('s3_secret_key', models.CharField(blank=True, max_length=255, null=True, verbose_name='S3 Gizli Anahtar')),
('s3_bucket_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='S3 Bucket Adı')),
('s3_region', models.CharField(blank=True, max_length=50, null=True, verbose_name='S3 Bölge')),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'verbose_name': 'Sistem Ayarları',
'verbose_name_plural': 'Sistem Ayarları',
},
),
migrations.AlterField(
model_name='backup',
name='file_size',
field=models.BigIntegerField(blank=True, null=True, verbose_name='Dosya Boyutu'),
),
]

View File

@ -0,0 +1,55 @@
# Generated by Django 5.2.4 on 2025-07-26 09:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ssh_manager', '0016_systemsettings_alter_backup_file_size'),
]
operations = [
migrations.RemoveField(
model_name='systemsettings',
name='backup_directory',
),
migrations.RemoveField(
model_name='systemsettings',
name='ssh_key_passphrase',
),
migrations.RemoveField(
model_name='systemsettings',
name='ssh_key_path',
),
migrations.AddField(
model_name='systemsettings',
name='s3_endpoint',
field=models.CharField(default='ams1.vultrobjects.com', max_length=255, verbose_name='Vultr S3 Endpoint'),
),
migrations.AlterField(
model_name='systemsettings',
name='s3_access_key',
field=models.CharField(default='', max_length=255, verbose_name='Vultr S3 Erişim Anahtarı'),
),
migrations.AlterField(
model_name='systemsettings',
name='s3_bucket_name',
field=models.CharField(default='backups', max_length=255, verbose_name='Vultr S3 Bucket Adı'),
),
migrations.AlterField(
model_name='systemsettings',
name='s3_region',
field=models.CharField(default='ams', max_length=50, verbose_name='Vultr S3 Bölge'),
),
migrations.AlterField(
model_name='systemsettings',
name='s3_secret_key',
field=models.CharField(default='', max_length=255, verbose_name='Vultr S3 Gizli Anahtar'),
),
migrations.AlterField(
model_name='systemsettings',
name='use_s3_storage',
field=models.BooleanField(default=True, help_text='Tüm yedekler Vultr S3 depolama alanına aktarılır', verbose_name='Vultr S3 Depolama'),
),
]