2 Commits

Author SHA1 Message Date
8df9be825f Feat: nothing 2025-03-01 13:55:45 +01:00
d0fc473134 Fix: cas where impayé raise error 2025-03-01 13:51:15 +01:00
3 changed files with 64 additions and 20 deletions

View File

@@ -13,6 +13,10 @@ extract_table_settings = {
} }
class ExtractError(Exception):
pass
def extract_date(page_text): def extract_date(page_text):
"""Extract date from a page """Extract date from a page
@@ -123,12 +127,10 @@ def extract_save(pdf_file, dest, save=[]):
pdf_file = Path(pdf_file) pdf_file = Path(pdf_file)
xlss = extract_plan(pdf_file, dest) xlss = extract_plan(pdf_file, dest)
if save != []: dfs = from_pdf(pdf_file)
dfs = from_pdf(pdf_file)
for s in save: for s in save:
dfs[s].to_excel(xlss[s], sheet_name=s, index=False) dfs[s].to_excel(xlss[s], sheet_name=s, index=False)
logging.info(f"{xlss[s]} saved") logging.info(f"{xlss[s]} saved")
return {k: v for k, v in xlss.items() if k in save}
return xlss return {k: v for k, v in xlss.items() if k in save}

View File

@@ -75,17 +75,30 @@ def fsm():
line = yield line = yield
elif current_state == "add_totaux": elif current_state == "add_totaux":
if line[0] == "Totaux": if line[0] == "Totaux":
row.update( if line[6] is None:
{ row.update(
"Loyers": line[2], {
"Taxes": line[3], "Loyers": line[2],
"Provisions": line[4], "Taxes": line[3],
"Divers": line[5], "Provisions": line[4],
"Total": line[7], "Divers": line[5],
"Réglés": line[8], "Total": line[7],
"Impayés": line[9], "Réglés": line[8],
} "Impayés": line[9],
) }
)
else:
row.update(
{
"Loyers": line[2],
"Taxes": line[3],
"Provisions": line[4],
"Divers": line[5],
"Total": line[6],
"Réglés": line[7],
"Impayés": line[8],
}
)
line = yield row line = yield row
row = {} row = {}
current_state = "new_row" current_state = "new_row"

View File

@@ -42,12 +42,41 @@ def extract():
@extract.command() @extract.command()
@click.argument("pdf_file", required=1) @click.argument("pdf_file", required=1)
@click.option("--dest", help="Où mettre les fichiers produits", default="") @click.option("--dest", help="Où mettre les fichiers produits", default="")
def on(pdf_file, dest): @click.option(
"--only-plan",
help="Ne produit rien mais indique les changements",
default=False,
is_flag=True,
)
@click.option(
"--force",
help="Écrase les fichiers produits précédemment",
default=False,
is_flag=True,
)
def on(pdf_file, dest, force, only_plan):
pdf_file = Path(pdf_file)
if not dest: if not dest:
pdf_path = Path(pdf_file) pdf_path = Path(pdf_file)
dest = pdf_path.parent dest = pdf_path.parent
else:
dest = Path(dest)
extract_save(pdf_file, dest) assert pdf_file.exists()
logging.info(f"Found {pdf_file}")
plan_dest = extract_plan(pdf_file, dest)
save = []
for k, p in plan_dest.items():
if not p.exists() or force:
save.append(k)
if only_plan:
for s in save:
logging.info(f"Planing to create {plan_dest[s]}")
else:
dest.mkdir(parents=True, exist_ok=True)
extract_save(pdf_file, dest, save)
@extract.command() @extract.command()