From b243ce80246d840b90c91d8dd177b2ec40841b10 Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Thu, 13 Apr 2017 09:51:19 +0200 Subject: [PATCH] family: always create invoices with orleans loader (#15855) Add pdfs files in import command --- passerelle/apps/family/loaders/concerto_orleans.py | 5 ++--- .../family/management/commands/import_orleans_data.py | 16 ++++++++-------- tests/test_family.py | 4 +++- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/passerelle/apps/family/loaders/concerto_orleans.py b/passerelle/apps/family/loaders/concerto_orleans.py index b6ce001..dd1ec28 100644 --- a/passerelle/apps/family/loaders/concerto_orleans.py +++ b/passerelle/apps/family/loaders/concerto_orleans.py @@ -168,10 +168,9 @@ class Loader(object): for invoice_data in family_data.get('invoices') or []: invoice_filename = self.invoice_filename_pattern % invoice_data['external_id'] - # create invoice object only if associated pdf exists + invoice, created = Invoice.objects.update_or_create(resource=self.connector, + family=family, external_id=invoice_data['external_id'], defaults=invoice_data) if invoice_filename in archive.namelist(): - invoice, created = Invoice.objects.update_or_create(resource=self.connector, - family=family, external_id=invoice_data['external_id'], defaults=invoice_data) invoice.write_pdf(archive.read(invoice_filename)) except Exception, e: diff --git a/passerelle/apps/family/management/commands/import_orleans_data.py b/passerelle/apps/family/management/commands/import_orleans_data.py index 5624c04..8905379 100644 --- a/passerelle/apps/family/management/commands/import_orleans_data.py +++ b/passerelle/apps/family/management/commands/import_orleans_data.py @@ -24,7 +24,7 @@ from optparse import make_option from django.core.files.base import File from django.core.management.base import BaseCommand, CommandError -from family.models import GenericFamily +from family.models import GenericFamily, Invoice LOCK_FILENAME = os.path.join(tempfile.gettempdir(), 'import-orleans-data.lock') @@ -62,14 +62,14 @@ class Command(BaseCommand): try: fd = open(LOCK_FILENAME, 'w') fcntl.lockf(fd, fcntl.LOCK_EX|fcntl.LOCK_NB) - invoices_dir = os.path.join(options['data_dir'], 'factures') - with zipfile.ZipFile(archive_path, 'a') as archive: - - for invoice_file in os.listdir(invoices_dir): - if invoice_file.startswith('facture_'): - archive.write(os.path.join(invoices_dir, invoice_file), - 'invoices/%s' % invoice_file) connector.archive.save(options['archive_name'], File(file(archive_path))) + invoices_dir = os.path.join(options['data_dir'], 'factures') + if not os.path.exists(invoices_dir): + raise Exception('Directory "%s" does not exist' % invoices_dir) + for invoice in connector.invoice_set.all(): + invoice_file_path = os.path.join(invoices_dir, 'facture_%s.pdf' % invoice.external_id) + if os.path.exists(invoice_file_path): + invoice.write_pdf(file(invoice_file_path).read()) except IOError: raise CommandError('Command already running.') except Exception, e: diff --git a/tests/test_family.py b/tests/test_family.py index 7bae016..2d93205 100644 --- a/tests/test_family.py +++ b/tests/test_family.py @@ -310,11 +310,13 @@ def test_orleans_data_import_command(): call_command('import_orleans_data', data_dir=data_dir, archive_name='family_data_orleans.zip', connector='test-orleans') - assert "No such file or directory: '%s/factures'" % data_dir in str(error.value) + assert 'Directory "%s/factures" does not exist' % data_dir in str(error.value) # create temporary expected dir for invoices invoices_dir = os.path.join(data_dir, 'factures') os.mkdir(invoices_dir) + Family.objects.filter(resource=resource).delete() + Invoice.objects.filter(resource=resource).delete() call_command('import_orleans_data', data_dir=data_dir, archive_name='family_data_orleans.zip', connector='test-orleans') -- 2.11.0