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)
45import 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