When using SQLFORM.grid selectable with multiple button I get the
following phenomena:
- When I click the buttons the associated action is properly performed.
which is the download of a zip file or excel file.
- After the download the button text of the second button changed and
becomes equal to the first one.
- When I click the button again, no action is performed but the text
changes back to the original.
- If there is no row selected a flash message is show to instruct the user.
In this case the buttons remain unchanged.
- The problem is probably related to the " raise HTTP" part of the download
see below.
- I do not understand what happens after the raise HTTP.
Can anybody help me with this?
Thanks, A3
Here is a fragment of the code:
@auth.requires_login()
def view_report_simple():
qr = (db.reports.Customerid=="020030")
fields = (db.reports.id,db.reports.Reportdate, db.reports.Reportnr,
db.reports.Reference,db.reports.Sample_date)
list_of_names_to_include = ['Reportdate','Reportnr','Reference']
[setattr(f, 'readable', False) for f in db.reports if f.name not in
list_of_names_to_include]
left = None
links = [dict(header='',body=lambda row: A('Pdf',
_class='btn',_href=(URL('default','showpdf',vars=dict(id=row.reports.id,
Reportnr= row.reports.Reportnr))),
user_signature=True)),
]
grid = SQLFORM.grid(qr,fields =fields,
orderby=
~db.reports.Reportdate|~db.reports.Reportnr,
groupby = db.reports.Reportnr,
left = left,
create = False,
deletable = False,
editable = False,
showbuttontext=False,
csv=False,
maxtextlength = 64,
paginate = 10,
links_in_grid=True,
links = links,
selectable = [('Download selected PDFs as
ZIP',lambda row : mapping_multiple(row)),
('Download selected as EXCEL',lambda
row : mapping_multiple_excel(row))
]
)
heading=grid.elements('th')
if heading:
heading[0].append(INPUT(_type='checkbox',
_id = 'check_all',
_onclick="""jQuery('input[type=checkbox][name="records"]').each(function(k)
{if
($("#check_all").prop("checked")){
jQuery(this).prop('checked', true);
}else{
jQuery(this).prop('checked', false);
}
});"""))
details = DIV("Details",_id="details")
return dict(grid=grid, details=details, reportnr="123456")
@auth.requires_login()
def mapping_multiple_excel(ids):
#ids is equal to Reportnr because groupby = db.reports.Reportnr,
if ids<>None and ids<>'' and len(ids)<>0:
book = None
buff = None
import xlwt
import StringIO
buff = StringIO.StringIO()
# This is my excel file:
book = xlwt.Workbook()
lent = len(ids)
if len(ids) > 1:
start = ids[0]
end = ids[-1]
filename = "Reports {start}_{end}".format(start=start, end=end)
else:
start = ids[0]
filename = "Reports {start}".format(start=start)
sheet1 = book.add_sheet('Reports')
fields = customheaderlist
for col in range(len(fields)):
sheet1.write(0,col,fields[col])
r = 1
for row in ids:
Rnr = row
q = (db.reports.Reportnr==Rnr)
s = db(q)
xlsrow = s.select(cache=(cache.ram, 1800)).first()
if xlsrow == None:
return 'Report nr %s not found' % Rnr
report=xlsrow.get('reports')
data = [ reports.field1, reports.field2, ]
for col in range(len(data)):
sheet1.write(r,col,data[col])
r = r + 1
book.save(buff)
response.headers['Content-Type']='application/vnd.ms-excel'
response.headers['Content-Disposition'] = 'attachment;
filename="%s.xls"' % filename
raise HTTP(200, buff.getvalue(), **response.headers)
#return
else:
session.flash = DIV("Select one or more reports")
return
return
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.