This commit is contained in:
Mateusz Gruszczyński
2026-03-13 11:03:13 +01:00
commit 35571df778
132 changed files with 11197 additions and 0 deletions

61
app/seed.py Normal file
View File

@@ -0,0 +1,61 @@
from datetime import date, datetime, timedelta
from pathlib import Path
from werkzeug.security import generate_password_hash
from app.extensions import db
from app.models.invoice import Invoice, InvoiceStatus, InvoiceType, Tag
from app.models.setting import AppSetting
from app.models.user import User
from app.models.company import Company, UserCompanyAccess
def seed_data():
company = Company.query.filter_by(name='Demo Sp. z o.o.').first()
if not company:
company = Company(name='Demo Sp. z o.o.', tax_id='5250000001', sync_enabled=True, sync_interval_minutes=60)
db.session.add(company)
db.session.flush()
if not User.query.filter_by(email='admin@example.com').first():
user = User(email='admin@example.com', name='Admin', password_hash=generate_password_hash('admin123'), role='admin')
db.session.add(user)
db.session.flush()
db.session.add(UserCompanyAccess(user_id=user.id, company_id=company.id, access_level='full'))
AppSetting.set(f'company.{company.id}.ksef.last_sync_at', datetime.utcnow().isoformat())
AppSetting.set(f'company.{company.id}.ksef.status', 'ready')
AppSetting.set(f'company.{company.id}.notify.enabled', 'true')
AppSetting.set(f'company.{company.id}.notify.min_amount', '1000')
AppSetting.set(f'company.{company.id}.ksef.base_url', 'https://api.ksef.mf.gov.pl/v2')
AppSetting.set(f'company.{company.id}.ksef.auth_mode', 'token')
AppSetting.set(f'company.{company.id}.ksef.mock_mode', 'true')
AppSetting.set(f'company.{company.id}.app.read_only_mode', 'false')
if Invoice.query.filter_by(company_id=company.id).count() == 0:
tag = Tag.query.filter_by(name='stały dostawca').first() or Tag(name='stały dostawca', color='primary')
db.session.add(tag)
db.session.flush()
archive_dir = Path('storage/archive/company_%s' % company.id)
archive_dir.mkdir(parents=True, exist_ok=True)
for idx in range(1, 13):
issued = date.today() - timedelta(days=idx * 7)
xml_path = archive_dir / f'FV_{idx:03d}.xml'
xml_path.write_text(f'<Invoice><Number>FV/{idx:03d}/2026</Number></Invoice>', encoding='utf-8')
invoice = Invoice(
company_id=company.id,
ksef_number=f'KSEF/C{company.id}/{2025 + (idx % 2)}/{1000 + idx}',
invoice_number=f'FV/{idx:03d}/2026',
contractor_name=f'Kontrahent {idx}',
contractor_nip=f'12345678{idx:02d}',
issue_date=issued,
received_date=issued + timedelta(days=1),
fetched_at=datetime.utcnow() - timedelta(days=idx),
net_amount=1000 * idx,
vat_amount=230 * idx,
gross_amount=1230 * idx,
invoice_type=InvoiceType.PURCHASE if idx % 2 else InvoiceType.SALE,
status=InvoiceStatus.NEW if idx % 3 else InvoiceStatus.ACCOUNTED,
currency='PLN',
xml_path=str(xml_path),
internal_note='Przykładowa faktura testowa.',
queue_accounting=idx % 2 == 0,
)
invoice.tags.append(tag)
db.session.add(invoice)
db.session.commit()