62 lines
3.2 KiB
Python
62 lines
3.2 KiB
Python
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()
|