Beispiel #1
0
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])
Beispiel #2
0
 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
                 }
             }
         )
Beispiel #4
0
 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
                 }
             }
         )
Beispiel #6
0
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()
Beispiel #7
0
    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()
Beispiel #8
0
 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]
Beispiel #9
0
def delete_expired_files():
    from core.models import VosaeFile
    for vosae_file in VosaeFile.objects(delete_after__lte=now()):
        vosae_file.delete()