def testFieldGroupSectionVisibility(self): states = QgsVectorLayer("Point?crs=epsg:4326&field=country:string(20)&field=state:string(20)", "points", "memory") p = QgsProject() r = QgsReport(p) # add a child child1 = QgsReportSectionFieldGroup() child1.setLayer(states) child1.setField('country') child1_header = QgsLayout(p) child1.setHeader(child1_header) child1.setHeaderEnabled(True) child1_footer = QgsLayout(p) child1.setFooter(child1_footer) child1.setFooterEnabled(True) r.appendChild(child1) # check that no header was rendered when no features are found self.assertTrue(r.beginRender()) self.assertFalse(r.next()) child1.setHeaderVisibility(QgsReportSectionFieldGroup.AlwaysInclude) child1.setFooterVisibility(QgsReportSectionFieldGroup.AlwaysInclude) # check that the header is included when no features are found self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer)
def testFieldGroupMultiLayer(self): # create a layer states = QgsVectorLayer("Point?crs=epsg:4326&field=country:string(20)&field=state:string(20)", "points", "memory") attributes = [ ['Australia', 'QLD'], ['NZ', 'state1'], ['Australia', 'VIC'], ['NZ', 'state2'], ['PNG', 'state3'], ['Australia', 'NSW'] ] pr = states.dataProvider() for a in attributes: f = QgsFeature() f.initAttributes(2) f.setAttribute(0, a[0]) f.setAttribute(1, a[1]) self.assertTrue(pr.addFeature(f)) places = QgsVectorLayer("Point?crs=epsg:4326&field=state:string(20)&field=town:string(20)", "points", "memory") attributes = [ ['QLD', 'Brisbane'], ['QLD', 'Emerald'], ['state1', 'town1'], ['VIC', 'Melbourne'], ['state1', 'town2'], ['QLD', 'Beerburrum'], ['VIC', 'Geelong'], ['state3', 'town1'] ] pr = places.dataProvider() for a in attributes: f = QgsFeature() f.initAttributes(2) f.setAttribute(0, a[0]) f.setAttribute(1, a[1]) self.assertTrue(pr.addFeature(f)) p = QgsProject() r = QgsReport(p) # add a child child1 = QgsReportSectionFieldGroup() child1_body = QgsLayout(p) child1.setLayer(states) child1.setBody(child1_body) child1.setBodyEnabled(True) child1.setField('country') r.appendChild(child1) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertFalse(r.next()) # another group # remove body from child1 child1.setBodyEnabled(False) child2 = QgsReportSectionFieldGroup() child2_body = QgsLayout(p) child2.setLayer(states) child2.setBody(child2_body) child2.setBodyEnabled(True) child2.setField('state') child1.appendChild(child2) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertFalse(r.next()) # another group child3 = QgsReportSectionFieldGroup() child3_body = QgsLayout(p) child3.setLayer(places) child3.setBody(child3_body) child3.setBodyEnabled(True) child3.setField('town') child3.setSortAscending(False) child2.appendChild(child3) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Brisbane']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertFalse(r.next()) # add headers/footers child3_header = QgsLayout(p) child3.setHeader(child3_header) child3.setHeaderEnabled(True) child3_footer = QgsLayout(p) child3.setFooter(child3_footer) child3.setFooterEnabled(True) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Brisbane']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertFalse(r.next())
def testIteration(self): p = QgsProject() r = QgsReport(p) # empty report self.assertTrue(r.beginRender()) self.assertFalse(r.next()) # add a header r.setHeaderEnabled(True) report_header = QgsLayout(p) r.setHeader(report_header) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertFalse(r.next()) # add a footer r.setFooterEnabled(True) report_footer = QgsLayout(p) r.setFooter(report_footer) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add a child child1 = QgsReportSectionLayout() child1_body = QgsLayout(p) child1.setBody(child1_body) r.appendChild(child1) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # header and footer on child child1_header = QgsLayout(p) child1.setHeader(child1_header) child1.setHeaderEnabled(True) child1_footer = QgsLayout(p) child1.setFooter(child1_footer) child1.setFooterEnabled(True) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add another child child2 = QgsReportSectionLayout() child2_header = QgsLayout(p) child2.setHeader(child2_header) child2.setHeaderEnabled(True) child2_footer = QgsLayout(p) child2.setFooter(child2_footer) child2.setFooterEnabled(True) r.appendChild(child2) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add a child to child2 child2a = QgsReportSectionLayout() child2a_header = QgsLayout(p) child2a.setHeader(child2a_header) child2a.setHeaderEnabled(True) child2a_footer = QgsLayout(p) child2a.setFooter(child2a_footer) child2a.setFooterEnabled(True) child2.appendChild(child2a) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0001.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0002.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.filePath('/tmp/myreport', '.png'), '/tmp/myreport_0003.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertEqual(r.filePath('/tmp/myreport', 'jpg'), '/tmp/myreport_0004.jpg') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0005.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2a_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0006.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2a_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0007.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0008.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0009.png') self.assertFalse(r.next())