|
1 | 1 | import { useEffect, useRef, useState } from 'react' |
2 | 2 | import { Camera, ImagePlus, ScanLine, RotateCcw, X, Plus, ScrollText } from 'lucide-react' |
3 | | -import { ladeBild, dateiAlsDataUrl, verkleinern, entzerren, verbessern, eckenFinden, dokumentFilter } from '../lib/scan' |
| 3 | +import { ladeBild, dateiAlsDataUrl, verkleinern, entzerren, verbessern, eckenFinden, dokumentFilter, ablagefassung } from '../lib/scan' |
4 | 4 | import { belegLesen } from '../lib/ai' |
5 | 5 | import { parseBetrag } from '../lib/abrechnung' |
6 | 6 | import Vollbild from './Vollbild' |
@@ -202,17 +202,19 @@ export default function BelegScanner({ gewerke = [], projekt, verschleissProzent |
202 | 202 | }, 30) |
203 | 203 | } |
204 | 204 | const setPos = (i, patch) => setKi((k) => ({ ...k, positionen: k.positionen.map((p, j) => (j === i ? { ...p, ...patch } : p)) })) |
205 | | - const fertig = (weiter) => { |
| 205 | + const fertig = async (weiter) => { |
206 | 206 | const betrag = parseBetrag(ki.betrag) |
207 | 207 | if (Number.isNaN(betrag) || betrag <= 0) { alert('Bitte den Gesamtbetrag des Belegs eintragen, z. B. 127,53.'); return } |
208 | 208 | const alle = ki.positionen.map((p) => ({ ...p, gesamt: parseBetrag(p.gesamt) })).filter((p) => p.bezeichnung.trim() && Number.isFinite(p.gesamt) && p.gesamt > 0) |
209 | 209 | // Verschleißteile: nur der eingestellte Anteil wird berechnet |
210 | 210 | const positionen = alle.filter((p) => !p.privat).map((p) => ({ ...p, anteil: p.verschleiss ? Math.max(0, Math.min(100, parseBetrag(p.anteil) || 0)) : 100 })) |
211 | 211 | const privat = alle.filter((p) => p.privat).reduce((a, p) => a + p.gesamt, 0) |
212 | 212 | // Originalfoto (komprimiert) und Ecken mitgeben, damit der Zuschnitt später korrigierbar bleibt |
213 | | - const roh = { bild: quelle.toDataURL('image/jpeg', 0.7), ecken } |
| 213 | + // langer Beleg: das zusammengesetzte Bild ist schon zugeschnitten, ein Rohbild bräuchte nur Platz (und sprengt sonst den Cloud-Upload) |
| 214 | + const roh = lang ? null : { bild: quelle.toDataURL('image/jpeg', 0.7), ecken } |
214 | 215 | const privatPositionen = alle.filter((p) => p.privat) |
215 | | - onFertig({ dataUrl: ergebnis, lieferant: ki.lieferant.trim(), datum: ki.datum, betrag, positionen, privat, privatPositionen, roh }, { weiter }) |
| 216 | + const bildUrl = lang ? await ablagefassung(ergebnis) : ergebnis |
| 217 | + onFertig({ dataUrl: bildUrl, lieferant: ki.lieferant.trim(), datum: ki.datum, betrag, positionen, privat, privatPositionen, roh }, { weiter }) |
216 | 218 | } |
217 | 219 |
|
218 | 220 | if (!quelle) { |
|
0 commit comments