Skip to content

Commit 98aff53

Browse files
committed
[IMP] lighting_export_xlsx: Group attachments by type instead of position
1 parent 2f0a815 commit 98aff53

2 files changed

Lines changed: 24 additions & 24 deletions

File tree

lighting_export_xlsx/models/product_attachment.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@ def export_xlsx(self, template_id=None):
1717
for pa in prod_attachment_ids:
1818
if not pa.public:
1919
pa.sudo().public = True
20-
type_meta = pa.fields_get(["type_id"], ["string"])["type_id"]
20+
pa.fields_get(["type_id"], ["string"])["type_id"]
2121
res.append(
2222
OrderedDict(
2323
[
24-
(type_meta["string"], pa.type_id.display_name),
25-
("URL", pa.url_get(resolution=ta.resolution)),
24+
(
25+
pa.type_id.display_name,
26+
pa.url_get(resolution=ta.resolution),
27+
),
2628
]
2729
)
2830
)

lighting_export_xlsx/report/export_product_xlsx.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Copyright NuoBiT Solutions - Eric Antones <[email protected]>
22
# Copyright NuoBiT Solutions - Kilian Niubo <[email protected]>
3+
# Copyright NuoBiT Solutions 2025 - Bijaya Kumal <[email protected]>
34
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
45
import logging
56

@@ -32,6 +33,7 @@ def generate_xlsx_report_ctx(self, workbook, data, objects):
3233
objects = self.env[active_model].search(active_domain)
3334
else:
3435
objects = self.env["lighting.product"].browse(data.get("active_ids"))
36+
3537
if data.get("exclude_configurator"):
3638
objects = objects.filtered(lambda x: not x.configurator)
3739

@@ -90,35 +92,33 @@ def generate_xlsx_report_ctx(self, workbook, data, objects):
9092
row += 1
9193

9294
def _get_meta_num(self, meta, datum, obj_d):
93-
subfields = []
95+
pass
96+
9497
for j, sf in enumerate(datum, 1):
95-
# update x in headers
96-
sf1 = list(sf.keys())
97-
if subfields:
98-
if set(subfields) != set(sf1):
99-
raise Exception("Unexpected Error")
100-
else:
101-
subfields = sf1
98+
if not isinstance(sf, dict) or not sf:
99+
continue
100+
field_name, exportable_value = next(iter(sf.items()))
101+
column_name = f"Attachment{j}/{field_name}"
102102

103-
fnam = "%s%i" % (meta["string"], j)
104-
for k, v in sf.items():
105-
sfkey = "%s/%s" % (fnam, k)
106-
if sfkey in obj_d:
107-
raise Exception("The subfield '%s' is duplicated" % sfkey)
108-
obj_d[sfkey] = v
103+
if column_name in obj_d:
104+
raise Exception(f"The column '{column_name}' already exists")
109105

110-
if not meta["subfields"]:
111-
meta["subfields"] = []
112-
if sfkey not in meta["subfields"]:
113-
meta["subfields"].append(sfkey)
106+
obj_d[column_name] = exportable_value
114107

115-
return max(meta["num"], len(datum)), obj_d
108+
if not meta.get("subfields"):
109+
meta["subfields"] = []
110+
if column_name not in meta["subfields"]:
111+
meta["subfields"].append(column_name)
112+
113+
meta["num"] = max(meta["num"], len(datum))
114+
return meta["num"], obj_d
116115

117116
def _generate_products(self, header, object_ids, template_id):
118117
n = len(object_ids)
119118
_logger.info("Generating %i products..." % n)
120119
th = int(n / 100) or 1
121120
objects_ld = []
121+
122122
for i, obj_id in enumerate(object_ids, 1):
123123
obj = self.env["lighting.product"].browse(obj_id)
124124
obj_d = {}
@@ -142,9 +142,7 @@ def _generate_products(self, header, object_ids, template_id):
142142
datum = None
143143

144144
if isinstance(datum, (tuple, list)):
145-
146145
meta["num"], obj_d = self._get_meta_num(meta, datum, obj_d)
147-
148146
else:
149147
fkey = meta["string"]
150148
if fkey in obj_d:

0 commit comments

Comments
 (0)