Initial commit – AufmaßCreater v2.35
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
from flask import render_template
|
||||
from flask_login import current_user
|
||||
from app.extensions import db
|
||||
from app.models.lv import LVPosition
|
||||
|
||||
TEMPLATE = 'components/modul_sas_mecka.html'
|
||||
|
||||
def get_formular_html():
|
||||
return render_template(TEMPLATE)
|
||||
|
||||
|
||||
def _lookup_pos(pos_nr):
|
||||
lv_pos = LVPosition.query.filter_by(
|
||||
company_id=current_user.company_id,
|
||||
pos_nr=pos_nr
|
||||
).first()
|
||||
if lv_pos:
|
||||
return {'pos_nr': lv_pos.pos_nr, 'kurztext': lv_pos.kurztext,
|
||||
'einheit': lv_pos.einheit, 'einzelpreis': lv_pos.einzelpreis}
|
||||
return {'pos_nr': pos_nr, 'kurztext': f'Position {pos_nr}',
|
||||
'einheit': 'ST', 'einzelpreis': 0}
|
||||
|
||||
|
||||
def _make_pos(pos_nr, faktor=1.0, laenge=0, breite=0, tiefe=0,
|
||||
menge=None, bemerkung='', abschnitt=''):
|
||||
lv = _lookup_pos(pos_nr)
|
||||
pos = {'pos_nr': pos_nr, 'kurztext': lv['kurztext'],
|
||||
'einheit': lv['einheit'], 'einzelpreis': lv['einzelpreis'],
|
||||
'faktor': faktor, 'laenge': laenge, 'breite': breite, 'tiefe': tiefe,
|
||||
'bemerkung': bemerkung, 'abschnitt': abschnitt}
|
||||
if menge is not None:
|
||||
pos['menge'] = menge
|
||||
return pos
|
||||
|
||||
|
||||
def berechne(form_data):
|
||||
positionen = []
|
||||
abschnitt_ha = form_data.get('scan_name_ha', '')
|
||||
|
||||
# ── HA (Hausanschluss) ──
|
||||
if form_data.get('ha_herstellen') == 'an':
|
||||
for pnr in ['01.06.0001', '01.06.0003', '01.06.0007']:
|
||||
positionen.append(_make_pos(pnr, faktor=1.0, menge=1,
|
||||
abschnitt=abschnitt_ha))
|
||||
|
||||
anz_qkr = _float(form_data.get('anz_qkr', 0))
|
||||
anz_qst = _float(form_data.get('anz_qst', 0))
|
||||
if anz_qkr > 0:
|
||||
bem = "Siehe Bild: "
|
||||
positionen.append(_make_pos('01.03.0019',
|
||||
faktor=anz_qst if anz_qst > 0 else 1,
|
||||
laenge=1.0, menge=1.0, bemerkung=bem,
|
||||
abschnitt=abschnitt_ha))
|
||||
positionen.append(_make_pos('01.03.0020',
|
||||
faktor=anz_qkr, laenge=0.5, menge=0.5,
|
||||
bemerkung=bem, abschnitt=abschnitt_ha))
|
||||
|
||||
trmeter = _float(form_data.get('trassenmeter', 0))
|
||||
strqm_ha = _float(form_data.get('strqm', 0))
|
||||
if trmeter > 0:
|
||||
positionen.append(_make_pos('01.06.0004',
|
||||
faktor=1.0, laenge=trmeter,
|
||||
abschnitt=abschnitt_ha))
|
||||
|
||||
einzug10 = form_data.get('einzug_10er') == 'an'
|
||||
if einzug10:
|
||||
positionen.append(_make_pos('01.04.0003',
|
||||
faktor=1.0, laenge=trmeter, menge=trmeter,
|
||||
abschnitt=abschnitt_ha))
|
||||
positionen.append(_make_pos('01.06.0006',
|
||||
faktor=1.0, laenge=trmeter, menge=trmeter,
|
||||
abschnitt=abschnitt_ha))
|
||||
else:
|
||||
leange = trmeter + 1 + strqm_ha
|
||||
positionen.append(_make_pos('01.06.0006',
|
||||
faktor=1.0, laenge=leange,
|
||||
abschnitt=abschnitt_ha))
|
||||
|
||||
kabelm_ha = _float(form_data.get('kabelmeter_ha', 0))
|
||||
if kabelm_ha > 0:
|
||||
bem = "Siehe Bild: "
|
||||
positionen.append(_make_pos('01.03.0019',
|
||||
faktor=1.0, laenge=kabelm_ha, menge=kabelm_ha,
|
||||
bemerkung=bem, abschnitt=abschnitt_ha))
|
||||
positionen.append(_make_pos('01.03.0020',
|
||||
faktor=1.0, laenge=kabelm_ha, menge=kabelm_ha,
|
||||
bemerkung=bem, abschnitt=abschnitt_ha))
|
||||
|
||||
if strqm_ha > 0:
|
||||
positionen.append(_make_pos('01.03.0008',
|
||||
faktor=1.0, laenge=strqm_ha, menge=strqm_ha,
|
||||
bemerkung="Öffentlicherbereich ", abschnitt=abschnitt_ha))
|
||||
|
||||
anz_sh = _float(form_data.get('anz_suchgrube_ha', 0))
|
||||
if anz_sh > 0:
|
||||
positionen.append(_make_pos('01.03.0018',
|
||||
faktor=1.0, menge=anz_sh,
|
||||
bemerkung="Öffentlicherbereich ", abschnitt=abschnitt_ha))
|
||||
|
||||
# ── TB (Tiefbau) ──
|
||||
tb_laenge = _float(form_data.get('tb_laenge', 0))
|
||||
tb_tiefe = _float(form_data.get('tb_tiefe', 0))
|
||||
abschnitt_tb = form_data.get('scan_name_tb', '')
|
||||
|
||||
if tb_laenge > 0 and tb_tiefe > 0:
|
||||
if tb_tiefe <= 0.65:
|
||||
tief_key = '0.6'
|
||||
elif tb_tiefe <= 0.9:
|
||||
tief_key = '0.8'
|
||||
else:
|
||||
tief_key = '1.2'
|
||||
|
||||
tiefe_map = {
|
||||
'0.6': {'unbe': '01.03.0001', 'be_kg2': '01.03.0004',
|
||||
'be_kg4': '01.03.0005', 'be_kg6': '01.03.0006'},
|
||||
'0.8': {'unbe': '01.03.0002', 'be_kg2': '01.03.0008',
|
||||
'be_kg4': '01.03.0009', 'be_kg6': '01.03.0010'},
|
||||
'1.2': {'unbe': '01.03.0003', 'be_kg2': '01.03.0012',
|
||||
'be_kg4': '01.03.0013', 'be_kg6': '01.03.0014'},
|
||||
}
|
||||
|
||||
tm = tiefe_map[tief_key]
|
||||
if form_data.get('tb_unbefestigt') == 'an':
|
||||
positionen.append(_make_pos(tm['unbe'],
|
||||
faktor=1.0, laenge=tb_laenge,
|
||||
abschnitt=abschnitt_tb))
|
||||
|
||||
if form_data.get('tb_befestigt') == 'an':
|
||||
for kg_key, map_key in [('tb_kg2', 'be_kg2'), ('tb_kg4', 'be_kg4'),
|
||||
('tb_kg6', 'be_kg6')]:
|
||||
if form_data.get(kg_key) == 'an':
|
||||
positionen.append(_make_pos(tm[map_key],
|
||||
faktor=1.0, laenge=tb_laenge,
|
||||
abschnitt=abschnitt_tb))
|
||||
|
||||
anz_4x20 = _float(form_data.get('tb_anz_4x12', 0))
|
||||
if anz_4x20 > 0:
|
||||
positionen.append(_make_pos('01.04.0001',
|
||||
faktor=anz_4x20, laenge=tb_laenge, menge=tb_laenge,
|
||||
bemerkung=f"{int(anz_4x20)}x 4x20 Rohre",
|
||||
abschnitt=abschnitt_tb))
|
||||
|
||||
anz_12x10 = _float(form_data.get('tb_anz_12x10', 0))
|
||||
if anz_12x10 > 0:
|
||||
positionen.append(_make_pos('01.04.0002',
|
||||
faktor=anz_12x10, laenge=tb_laenge, menge=tb_laenge,
|
||||
bemerkung=f"{int(anz_12x10)}x 12x10 Rohre",
|
||||
abschnitt=abschnitt_tb))
|
||||
|
||||
tb_anz_qs = _float(form_data.get('tb_anz_qs', 0))
|
||||
if tb_anz_qs > 0:
|
||||
bem = "Siehe Bild: "
|
||||
tb_anz_qk = _float(form_data.get('tb_anz_qk', 0))
|
||||
positionen.append(_make_pos('01.03.0019',
|
||||
faktor=tb_anz_qs, laenge=1.0, menge=1.0,
|
||||
bemerkung=bem, abschnitt=abschnitt_tb))
|
||||
positionen.append(_make_pos('01.03.0020',
|
||||
faktor=tb_anz_qk if tb_anz_qk > 0 else 1,
|
||||
laenge=0.5, menge=0.5, bemerkung=bem,
|
||||
abschnitt=abschnitt_tb))
|
||||
|
||||
tb_kabelm = _float(form_data.get('tb_kabelmeter', 0))
|
||||
if tb_kabelm > 0:
|
||||
bem = "Siehe Bild: "
|
||||
positionen.append(_make_pos('01.03.0019',
|
||||
faktor=1.0, laenge=tb_kabelm, menge=tb_kabelm,
|
||||
bemerkung=bem, abschnitt=abschnitt_tb))
|
||||
positionen.append(_make_pos('01.03.0020',
|
||||
faktor=1.0, laenge=tb_kabelm, menge=tb_kabelm,
|
||||
bemerkung=bem, abschnitt=abschnitt_tb))
|
||||
|
||||
anz_tb_sg = _float(form_data.get('tb_anz_suchgrube', 0))
|
||||
if anz_tb_sg > 0:
|
||||
positionen.append(_make_pos('01.03.0018',
|
||||
faktor=1.0, menge=anz_tb_sg,
|
||||
bemerkung="Öffentlicherbereich ", abschnitt=abschnitt_tb))
|
||||
|
||||
return positionen
|
||||
|
||||
|
||||
def _float(val, default=0):
|
||||
try:
|
||||
return float(str(val).replace(',', '.'))
|
||||
except (ValueError, TypeError):
|
||||
return default
|
||||
Reference in New Issue
Block a user