Changeset 13949 for main/waeup.kofa/trunk/src/waeup/kofa
- Timestamp:
- 17 Jun 2016, 07:46:34 (9 years ago)
- Location:
- main/waeup.kofa/trunk/src/waeup/kofa/applicants
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/trunk/src/waeup/kofa/applicants/export.py
r13542 r13949 22 22 from zope.component import queryUtility 23 23 from waeup.kofa.applicants.interfaces import ( 24 IApplicantBaseData, IApplicantsContainer )24 IApplicantBaseData, IApplicantsContainer, IApplicantOnlinePayment) 25 25 from waeup.kofa.interfaces import ICSVExporter 26 26 from waeup.kofa.interfaces import MessageFactory as _ … … 128 128 # We therefore search for applicant_id. 129 129 applicant_id=(None, None)) 130 used = [value for value in applicants if value.container_code.endswith('+')] 130 used = [value for value in applicants 131 if value.container_code.endswith('+')] 131 132 return self.export(used, filepath=filepath) 132 133 … … 138 139 container = grok.getSite()['applicants'][kw['container']] 139 140 container_values = container.values() 140 used = [value for value in container_values if value.container_code.endswith('+')] 141 used = [value for value in container_values 142 if value.container_code.endswith('+')] 141 143 return self.export(used, filepath=filepath) 144 145 146 class ApplicantPaymentExporter(grok.GlobalUtility, ExporterBase): 147 """The Applicant Payments Exporter exports all payments made by applicants. 148 In other words, it exports payment tickets in state 'paid'. The exporter 149 searches :class:`ApplicantsCatalog` and iterates over all payment tickets 150 which are stored in an applicant (container). 151 152 The exporter exports all applicant payments if started in the Data Center 153 which means in the context of the `DataCenter` object. The exporter can also 154 be started 'locally' which means in the context of an 155 `ApplicantsContainer` container, see `ApplicantExporter` above. 156 """ 157 grok.implements(ICSVExporter) 158 grok.name('applicantpayments') 159 160 fields = tuple(sorted(iface_names( 161 IApplicantOnlinePayment, 162 exclude_attribs=False, 163 omit=['display_item']))) + ('applicant_id',) 164 title = _(u'Applicant Payments') 165 166 def mangle_value(self, value, name, context=None): 167 """The mangler determines the applicant's id. 168 """ 169 if name == 'applicant_id' and context is not None: 170 applicant = context.__parent__ 171 value = getattr(applicant, name, None) 172 return super( 173 ApplicantPaymentExporter, self).mangle_value( 174 value, name, context=context) 175 176 def export(self, payments, filepath=None): 177 """ 178 """ 179 writer, outfile = self.get_csv_writer(filepath) 180 for payment in payments: 181 self.write_item(payment, writer) 182 return self.close_outfile(filepath, outfile) 183 184 def export_all(self, site, filepath=None): 185 """ 186 """ 187 catalog = queryUtility( 188 ICatalog, context=site, name='applicants_catalog', default=None) 189 if catalog is None: 190 return self.export([], filepath) 191 applicants = catalog.searchResults( 192 # reg_num might not be set and then would not be found. 193 # We therefore search for applicant_id. 194 applicant_id=(None, None)) 195 used = [value for value in applicants 196 if value.container_code.endswith('+')] 197 payments = [] 198 for applicant in used: 199 for payment in applicant.values(): 200 if payment.p_state == 'paid': 201 payments.append(payment) 202 return self.export(payments, filepath=filepath) 203 204 def export_filtered(self, site, filepath=None, **kw): 205 """ 206 """ 207 container = grok.getSite()['applicants'][kw['container']] 208 container_values = container.values() 209 used = [value for value in container_values 210 if value.container_code.endswith('+')] 211 payments = [] 212 for applicant in used: 213 for payment in applicant.values(): 214 if payment.p_state == 'paid': 215 payments.append(payment) 216 return self.export(payments, filepath=filepath) -
main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_export.py
r13080 r13949 6 6 import unittest 7 7 from zope.catalog.interfaces import ICatalog 8 from zope.component import queryUtility, getUtility 8 from zope.component import queryUtility, getUtility, createObject 9 9 from zope.interface.verify import verifyObject, verifyClass 10 10 from zope.intid.interfaces import IIntIds 11 11 from waeup.kofa.applicants import ApplicantsContainer 12 12 from waeup.kofa.applicants.export import ( 13 ApplicantsContainerExporter, ApplicantExporter) 13 ApplicantsContainerExporter, ApplicantExporter, 14 ApplicantPaymentExporter) 14 15 from waeup.kofa.applicants.interfaces import ( 15 16 AppCatSource, ApplicationTypeSource) … … 233 234 in result) 234 235 return 236 237 238 class ApplicantPaymentExporterTest(ApplicantImportExportSetup): 239 240 layer = FunctionalLayer 241 242 def setUp(self): 243 super(ApplicantPaymentExporterTest, self).setUp() 244 self.outfile = os.path.join(self.workdir, 'myoutput.csv') 245 self.cat = getUtility(ICatalog, name='applicants_catalog') 246 self.intids = getUtility(IIntIds) 247 return 248 249 def test_ifaces(self): 250 # make sure we fullfill interface contracts 251 obj = ApplicantPaymentExporter() 252 verifyObject(ICSVExporter, obj) 253 verifyClass(ICSVExporter, ApplicantPaymentExporter) 254 return 255 256 def test_get_as_utility(self): 257 # we can get an applicant exporter as utility 258 result = queryUtility(ICSVExporter, name="applicantpayments") 259 self.assertTrue(result is not None) 260 return 261 262 def setup_applicant(self, applicant): 263 # set predictable values for `applicant` 264 applicant.reg_number = u'123456' 265 applicant.applicant_id = u'dp2011_654321' 266 applicant.firstname = u'Anna' 267 applicant.lastname = u'Tester' 268 applicant.middlename = u'M.' 269 applicant.date_of_birth = datetime.date(1981, 2, 4) 270 applicant.sex = 'f' 271 applicant.email = 'anna@sample.com' 272 applicant.phone = u'+234-123-12345' 273 # Add payment 274 payment = createObject(u'waeup.ApplicantOnlinePayment') 275 payment.p_id = 'p120' 276 payment.p_session = 2012 277 payment.p_category = 'application' 278 payment.p_state = 'paid' 279 applicant['p120'] = payment 280 return applicant 281 282 def test_export(self): 283 applicant = self.setup_applicant(self.applicant) 284 exporter = ApplicantPaymentExporter() 285 exporter.export(applicant.values(), self.outfile) 286 result = open(self.outfile, 'rb').read() 287 cdate = str('%s#' % self.applicant['p120'].creation_date) 288 self.assertEqual( 289 'ac,amount_auth,creation_date,p_category,p_id,p_item,p_session,' 290 'p_state,payment_date,r_amount_approved,r_code,r_desc,' 291 'applicant_id\r\n,' 292 '0.0,%s,application,p120,,2012,' 293 'paid,,0.0,,,dp2011_654321\r\n' % cdate, result) 294 return 295 296 def test_export_all(self): 297 self.applicant = self.setup_applicant(self.applicant) 298 exporter = ApplicantPaymentExporter() 299 exporter.export_all(self.app, self.outfile) 300 result = open(self.outfile, 'rb').read() 301 cdate = str('%s#' % self.applicant['p120'].creation_date) 302 self.assertEqual( 303 'ac,amount_auth,creation_date,p_category,p_id,p_item,p_session,' 304 'p_state,payment_date,r_amount_approved,r_code,r_desc,' 305 'applicant_id\r\n,' 306 '0.0,%s,application,p120,,2012,' 307 'paid,,0.0,,,dp2011_654321\r\n' % cdate, result) 308 return 309 310 def test_export_filtered(self): 311 self.applicant = self.setup_applicant(self.applicant) 312 exporter = ApplicantPaymentExporter() 313 exporter.export_filtered( 314 self.app, self.outfile, container=self.container.code) 315 result = open(self.outfile, 'rb').read() 316 cdate = str('%s#' % self.applicant['p120'].creation_date) 317 self.assertEqual( 318 'ac,amount_auth,creation_date,p_category,p_id,p_item,p_session,' 319 'p_state,payment_date,r_amount_approved,r_code,r_desc,' 320 'applicant_id\r\n,' 321 '0.0,%s,application,p120,,2012,' 322 'paid,,0.0,,,dp2011_654321\r\n' % cdate, result) 323 return
Note: See TracChangeset for help on using the changeset viewer.