Spaces:
Running on Zero
Running on Zero
Update parser_welspun.py
Browse files- parser_welspun.py +7 -5
parser_welspun.py
CHANGED
|
@@ -70,6 +70,9 @@ def extract_welspun_items(pdf_lines, pdf_text=""):
|
|
| 70 |
|
| 71 |
|
| 72 |
def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_overall_sr=1, start_excel_row=2, default_invoice_no="", default_invoice_date="", pdf_text="", lut_kws="", paid_kws="", parser_rule=""):
|
|
|
|
|
|
|
|
|
|
| 73 |
curr_row = start_excel_row
|
| 74 |
overall_sr = start_overall_sr
|
| 75 |
|
|
@@ -99,6 +102,7 @@ def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_
|
|
| 99 |
|
| 100 |
nums = item.get("nums", [])
|
| 101 |
|
|
|
|
| 102 |
for field_name, r_info in item_rules.items():
|
| 103 |
col_letter = r_info.get("col", "").strip().upper()
|
| 104 |
rule_type_raw = str(r_info.get("type", "PDF Row Item")).strip()
|
|
@@ -110,14 +114,10 @@ def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_
|
|
| 110 |
if "extract" in rule_type_raw.lower() or "box" in rule_type_raw.lower() or "header" in rule_type_raw.lower() or col_letter in ["BW", "BY"]:
|
| 111 |
extracted_val = extract_header_value(
|
| 112 |
pdf_lines, pdf_text, rule_val,
|
| 113 |
-
"
|
| 114 |
-
"Exact Word", "", "None",
|
| 115 |
field_label=field_name
|
| 116 |
)
|
| 117 |
|
| 118 |
-
if not extracted_val or not extracted_val.strip():
|
| 119 |
-
extracted_val = extract_header_value(pdf_lines, pdf_text, rule_val, "Right (आगे)", "Exact Word", "", "None", field_label=field_name)
|
| 120 |
-
|
| 121 |
if extracted_val and "\n" in str(extracted_val):
|
| 122 |
lines = [l.strip() for l in str(extracted_val).split("\n") if l.strip()]
|
| 123 |
if item_idx < len(lines):
|
|
@@ -130,6 +130,7 @@ def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_
|
|
| 130 |
else:
|
| 131 |
ws[f"{col_letter}{curr_row}"] = ""
|
| 132 |
|
|
|
|
| 133 |
for field_name, r_info in item_rules.items():
|
| 134 |
col_letter = r_info.get("col", "").strip().upper()
|
| 135 |
f_lower = field_name.lower()
|
|
@@ -145,6 +146,7 @@ def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_
|
|
| 145 |
elif "sr" in f_lower or f_lower == "sr." or rule_val_lower in ["(1)", "sr", "serial"] or col_letter == "BR":
|
| 146 |
ws[cell_ref] = item.get("commodity_sr", "")
|
| 147 |
|
|
|
|
| 148 |
for field_name, r_info in item_rules.items():
|
| 149 |
col_letter = r_info.get("col", "").strip().upper()
|
| 150 |
rule_type_raw = str(r_info.get("type", "PDF Row Item")).strip()
|
|
|
|
| 70 |
|
| 71 |
|
| 72 |
def map_items_to_excel_dynamic(ws, parsed_items, item_rules, inv_sr_no=1, start_overall_sr=1, start_excel_row=2, default_invoice_no="", default_invoice_date="", pdf_text="", lut_kws="", paid_kws="", parser_rule=""):
|
| 73 |
+
"""
|
| 74 |
+
Dynamic Excel mapping function for Welspun with multi-line Consignee/Buyer address split handling.
|
| 75 |
+
"""
|
| 76 |
curr_row = start_excel_row
|
| 77 |
overall_sr = start_overall_sr
|
| 78 |
|
|
|
|
| 102 |
|
| 103 |
nums = item.get("nums", [])
|
| 104 |
|
| 105 |
+
# 🚀 1. Handle Consignee / Buyer Box / Extract fields
|
| 106 |
for field_name, r_info in item_rules.items():
|
| 107 |
col_letter = r_info.get("col", "").strip().upper()
|
| 108 |
rule_type_raw = str(r_info.get("type", "PDF Row Item")).strip()
|
|
|
|
| 114 |
if "extract" in rule_type_raw.lower() or "box" in rule_type_raw.lower() or "header" in rule_type_raw.lower() or col_letter in ["BW", "BY"]:
|
| 115 |
extracted_val = extract_header_value(
|
| 116 |
pdf_lines, pdf_text, rule_val,
|
| 117 |
+
"Right (आगे)", "Exact Word", "", "None",
|
|
|
|
| 118 |
field_label=field_name
|
| 119 |
)
|
| 120 |
|
|
|
|
|
|
|
|
|
|
| 121 |
if extracted_val and "\n" in str(extracted_val):
|
| 122 |
lines = [l.strip() for l in str(extracted_val).split("\n") if l.strip()]
|
| 123 |
if item_idx < len(lines):
|
|
|
|
| 130 |
else:
|
| 131 |
ws[f"{col_letter}{curr_row}"] = ""
|
| 132 |
|
| 133 |
+
# 🚀 2. Commodity Sr (BR) & Name of Commodity (BS) mapping
|
| 134 |
for field_name, r_info in item_rules.items():
|
| 135 |
col_letter = r_info.get("col", "").strip().upper()
|
| 136 |
f_lower = field_name.lower()
|
|
|
|
| 146 |
elif "sr" in f_lower or f_lower == "sr." or rule_val_lower in ["(1)", "sr", "serial"] or col_letter == "BR":
|
| 147 |
ws[cell_ref] = item.get("commodity_sr", "")
|
| 148 |
|
| 149 |
+
# 🚀 3. Standard PDF Row Item Numeric & Other columns mapping
|
| 150 |
for field_name, r_info in item_rules.items():
|
| 151 |
col_letter = r_info.get("col", "").strip().upper()
|
| 152 |
rule_type_raw = str(r_info.get("type", "PDF Row Item")).strip()
|