Remove contract table

This commit is contained in:
2023-05-01 22:16:07 +02:00
parent 28248c0688
commit 8bc5dffab3
4 changed files with 94 additions and 116 deletions

View File

@ -599,7 +599,7 @@ def migrate_members(in_dir: str, out_dir: str) -> None:
f_mba.write(csv.format_row(mgnr, billing_name, 'AT', postal_dest, address or '-'))
def migrate_contracts(in_dir: str, out_dir: str) -> None:
def migrate_are_commitments(in_dir: str, out_dir: str) -> None:
def parse_gstnrs(nr_str: str, kgnr: int, mgnr: int) -> List[str]:
if nr_str is None:
return []
@ -614,7 +614,7 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
if nr_str.count('/') > 1:
parts = nr_str.split('/')
if all([p.isdigit() for p in parts]):
if all([len(p) <= 3 for p in parts[1:]]):
if all([len(p) <= 1 for p in parts[1:]]):
return [f'{parts[0]}/{p}' for p in parts[1:]]
elif all([len(p) == len(parts[0]) for p in parts]):
return parts
@ -650,20 +650,58 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
invalid(mgnr, 'GstNr.', f'{kgnr:05}-{nr_str}')
return []
with open(f'{out_dir}/contract.csv', 'w+', encoding='utf-8') as f_c, \
open(f'{out_dir}/area_commitment.csv', 'w+', encoding='utf-8') as f_fb, \
open(f'{out_dir}/area_commitment_parcel.csv', 'w+', encoding='utf-8') as f_parc, \
def replace_nrs(m: re.Match, sep: str) -> str:
end = m.group(0).endswith(sep)
parts = [int(p) for p in m.group(0).split(sep)]
text = ''
last = None
for i, p in enumerate(parts):
if last is not None:
if last + 1 == p:
last = p
continue
else:
text += f'{last}{sep}'
last = None
if len(parts) > i + 2 and p + 1 == parts[i + 1] and p + 2 == parts[i + 2]:
last = p
text += f'{p}-'
else:
text += f'{p}{sep}'
if last is not None:
text += str(last)
return text.strip().strip(sep) + (sep if end else '')
def format_gstnr(nrs: List[str]) -> Optional[str]:
if len(nrs) == 0:
return None
nrs = [re.sub(r'\b0+', '', nr)
for nr in sorted([re.sub(r'[0-9]+', lambda m: m.group(0).rjust(6, '0'), nr)
for nr in nrs])]
last = None
text = ''
for nr in nrs:
if last is None:
text += nr
elif '/' in last and last.split('/')[:-1] == nr.split('/')[:-1]:
text += f'+{nr.split("/")[-1]}'
else:
text += f', {nr}'
last = nr
text = re.sub(r'[0-9]+\+[0-9]+(\+[0-9]+)+', lambda m: replace_nrs(m, '+'), text)
text = re.sub(r'([0-9]+(, |$)){3,}', lambda m: replace_nrs(m, ', '), text)
return text
with open(f'{out_dir}/area_commitment.csv', 'w+', encoding='utf-8') as f_fb, \
open(f'{out_dir}/area_commitment_attribute.csv', 'w+', encoding='utf-8') as f_attr:
f_c.write('vnr;mgnr;date;year_from;year_to;comment\n')
f_fb.write('vnr;sortid;cultid;area\n')
f_parc.write('vnr;kgnr;gstnr;rdnr;area\n')
f_attr.write('vnr;attrid\n')
f_fb.write('fbnr;mgnr;sortid;cultid;area;kgnr;gstnr;rdnr;year_from;year_to;comment\n')
f_attr.write('fbnr;attrid\n')
for fb in csv.parse_dict(f'{in_dir}/TFlaechenbindungen.csv'):
if fb['Von'] is None and fb['Bis'] is None:
continue
parz: str = fb['Parzellennummer']
vnr: int = fb['FBNR']
fbnr: int = fb['FBNR']
mgnr: int = fb['MGNR']
gem = GEM_MAP[fb['GNR']]
kgnr = gem[0][0]
@ -672,24 +710,25 @@ def migrate_contracts(in_dir: str, out_dir: str) -> None:
area = int(fb['Flaeche'])
gstnrs = parse_gstnrs(parz, kgnr, fb['MGNR'])
comment = None
comment, gstnr = None, None
if parz is None or parz == '0000':
invalid(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz}')
gstnrs = []
gstnr = '-'
elif len(gstnrs) > 1 or (len(gstnrs) == 1 and gstnrs[0] != parz):
convert(mgnr, 'GstNr.', f'{kgnr or 0:05}-{parz or ""}', ', '.join(gstnrs))
if len(gstnrs) == 0:
comment = f'KG {kgnr}: {parz}'
comment = f'KG {kgnr:05}: {parz}'
gstnr = format_gstnr(gstnrs) or gstnr or parz
if parz != gstnr:
print(f'{parz or "None":32} -> {gstnr}')
rdnr = REED_MAP[fb['RNR']][1] if fb['RNR'] else None
to = fb['Bis'] if fb['Bis'] and fb['Bis'] < 3000 else None
f_c.write(csv.format_row(vnr, mgnr, None, fb['Von'], to, comment))
f_fb.write(csv.format_row(vnr, fb['SNR'], CULTIVATION_MAP[fb['BANR']], area))
f_fb.write(csv.format_row(fbnr, mgnr, fb['SNR'], CULTIVATION_MAP[fb['BANR']], area,
kgnr, gstnr, rdnr, fb['Von'], to, comment))
if fb['SANR']:
f_attr.write(csv.format_row(vnr, fb['SANR']))
for i, gstnr in enumerate(gstnrs):
rdnr = REED_MAP[fb['RNR']][1] if fb['RNR'] else None
f_parc.write(csv.format_row(vnr, kgnr, gstnr, rdnr, area if len(gstnrs) == 1 else None))
f_attr.write(csv.format_row(fbnr, fb['SANR']))
def fix_deliveries(deliveries: Iterable[Dict[str, Any]]) -> Iterable[Tuple[str, List[int], datetime.date]]:
@ -979,7 +1018,7 @@ def main() -> None:
migrate_attributes(args.in_dir, args.out_dir)
migrate_cultivations(args.in_dir, args.out_dir)
migrate_members(args.in_dir, args.out_dir)
migrate_contracts(args.in_dir, args.out_dir)
migrate_are_commitments(args.in_dir, args.out_dir)
migrate_deliveries(args.in_dir, args.out_dir)
migrate_payments(args.in_dir, args.out_dir)
migrate_parameters(args.in_dir, args.out_dir)