push
This commit is contained in:
61
app/seed.py
Normal file
61
app/seed.py
Normal 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()
|
||||
Reference in New Issue
Block a user