def export_documents(export): from contacts.imex import get_exportable_documents as contacts_documents from invoicing.imex import get_exportable_documents as invoicing_documents with respect_language(export.language): archive_name = _('Vosae export.zip') zipped = ContentFile('', archive_name) f = zipfile.ZipFile(zipped, mode='w', compression=zipfile.ZIP_DEFLATED) for documents, path_func, doc_func in contacts_documents(export): for document in documents: f.writestr(path_func(document), doc_func(document)) for documents, path_func, doc_func in invoicing_documents(export): for document in documents: f.writestr(path_func(document), doc_func(document)) f.close() zipped.content_type = "application/zip" export.zipfile = VosaeFile( tenant=export.tenant, uploaded_file=zipped, issuer=export.issuer ) export.zipfile.save() export.update(set__zipfile=export.zipfile) context = { 'tenant': export.tenant, 'file': export.zipfile, 'site': {'name': settings.SITE_NAME, 'url': settings.SITE_URL} } # Email to issuer subject = _('Your Vosae export is available') message = render_to_string('data_liberation/emails/export_finished.txt', context) send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [export.issuer.email])
def forwards(self, orm): # VosaeFile - Can't use `save()` because `uploaded_field` is required for vosae_file in VosaeFile.objects(): vosae_file.update( __raw__={ '$set': { 'created_at': vosae_file.id.generation_time, 'modified_at': vosae_file.id.generation_time }, '$unset': { 'temporary': 1 } })
def forwards(self, orm): # VosaeFile - Can't use `save()` because `uploaded_field` is required for vosae_file in VosaeFile.objects(): vosae_file.update( __raw__={ '$set': { 'created_at': vosae_file.id.generation_time, 'modified_at': vosae_file.id.generation_time }, '$unset': { 'temporary': 1 } } )
def backwards(self, orm): # VosaeFile - Can't use `save()` because `uploaded_field` is required for vosae_file in VosaeFile.objects(): vosae_file.update( __raw__={ '$unset': { 'ttl': 1, 'created_at': 1, 'modified_at': 1 }, '$set': { 'temporary': True if vosae_file.ttl else False } })
def backwards(self, orm): # VosaeFile - Can't use `save()` because `uploaded_field` is required for vosae_file in VosaeFile.objects(): vosae_file.update( __raw__={ '$unset': { 'ttl': 1, 'created_at': 1, 'modified_at': 1 }, '$set': { 'temporary': True if vosae_file.ttl else False } } )
def export_documents(export): from contacts.imex import get_exportable_documents as contacts_documents from invoicing.imex import get_exportable_documents as invoicing_documents with respect_language(export.language): archive_name = _('Vosae export.zip') zipped = ContentFile('', archive_name) f = zipfile.ZipFile(zipped, mode='w', compression=zipfile.ZIP_DEFLATED) for documents, path_func, doc_func in contacts_documents(export): for document in documents: f.writestr(path_func(document), doc_func(document)) for documents, path_func, doc_func in invoicing_documents(export): for document in documents: f.writestr(path_func(document), doc_func(document)) f.close() zipped.content_type = "application/zip" export.zipfile = VosaeFile(tenant=export.tenant, uploaded_file=zipped, issuer=export.issuer) export.zipfile.save() export.update(set__zipfile=export.zipfile) context = { 'tenant': export.tenant, 'file': export.zipfile, 'site': { 'name': settings.SITE_NAME, 'url': settings.SITE_URL } } # Email to issuer plaintext_context = Context( autoescape=False) # HTML escaping not appropriate in plaintext subject = subject = _("Your Vosae export is available") text_body = render_to_string( 'data_liberation/emails/export_finished.txt', context, plaintext_context) html_body = render_to_string( "data_liberation/emails/export_finished.html", context) message = EmailMultiAlternatives( subject=subject, from_email=settings.DEFAULT_FROM_EMAIL, to=[export.issuer.email], body=text_body) message.attach_alternative(html_body, "text/html") message.send()
def forwards(self, orm): # Tenant for tenant in Tenant.objects(): tenant._changed_fields = ['svg_logo', 'img_logo', 'terms', 'tenant_settings'] tenant.save() # VosaeFile - Can't use `save()` because `uploaded_field` is required for vosae_file in VosaeFile.objects(): vosae_file.update(set__tenant=vosae_file.tenant, set__issuer=vosae_file.issuer) # VosaeGroup for vosae_group in VosaeGroup.objects(): vosae_group._changed_fields = ['tenant', 'created_by'] vosae_group.save(force=True) # VosaeUser for vosae_user in VosaeUser.objects(): vosae_user._changed_fields = ['tenant', 'groups'] vosae_user.save()
def get_pdf(self, issuer=None, language=None): """Return the cached PDF or generate and cache it.""" from core.models import VosaeFile try: pdf_language = language or self.tenant.report_settings.language except: pdf_language = 'en' if not self.current_revision.pdf.get(pdf_language, None): with respect_language(pdf_language): buf = self.gen_pdf() pdf = ContentFile(buf.getvalue(), self.filename) pdf.content_type = "application/pdf" self.current_revision.pdf[pdf_language] = VosaeFile( tenant=self.tenant, uploaded_file=pdf, issuer=issuer ) self.current_revision.pdf[pdf_language].save() self.update(set__current_revision__pdf=self.current_revision.pdf) return self.current_revision.pdf[pdf_language]
def delete_expired_files(): from core.models import VosaeFile for vosae_file in VosaeFile.objects(delete_after__lte=now()): vosae_file.delete()