diff --git a/fahari/ops/filters.py b/fahari/ops/filters.py index 88e23097..8cda032c 100644 --- a/fahari/ops/filters.py +++ b/fahari/ops/filters.py @@ -42,7 +42,7 @@ class StockReceiptVerificationFilter(CommonFieldsFilterset): class Meta: model = StockReceiptVerification - fields = "__all__" + exclude = ("delivery_note_image",) class ActivityLogFilter(CommonFieldsFilterset): diff --git a/fahari/ops/forms.py b/fahari/ops/forms.py index 5bead18c..6ca0a578 100644 --- a/fahari/ops/forms.py +++ b/fahari/ops/forms.py @@ -125,6 +125,7 @@ class StockReceiptVerificationForm(BaseModelForm): "batch_number", "delivery_date", "expiry_date", + "delivery_note_image", "comments", "active", ) @@ -133,6 +134,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper.form_id = "stock_receipt_verification_form" self.fields["facility"].queryset = get_fahari_facilities_queryset() + self.fields["delivery_note_image"].required = True class Meta(BaseModelForm.Meta): model = StockReceiptVerification diff --git a/fahari/ops/migrations/0021_stockreceiptverification_delivery_note_image.py b/fahari/ops/migrations/0021_stockreceiptverification_delivery_note_image.py new file mode 100644 index 00000000..ed52e64c --- /dev/null +++ b/fahari/ops/migrations/0021_stockreceiptverification_delivery_note_image.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.6 on 2021-09-01 09:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ops', '0020_auto_20210902_0920'), + ] + + operations = [ + migrations.AddField( + model_name='stockreceiptverification', + name='delivery_note_image', + field=models.ImageField(blank=True, null=True, upload_to='ops/stock_receipts/delivery_notes/', verbose_name='Delivery note photograph'), + ), + ] diff --git a/fahari/ops/models.py b/fahari/ops/models.py index 67fcae4b..cd2832c3 100644 --- a/fahari/ops/models.py +++ b/fahari/ops/models.py @@ -348,6 +348,12 @@ class StockReceiptVerification(AbstractBase): batch_number = models.CharField(max_length=64) delivery_date = models.DateField(default=timezone.datetime.today) expiry_date = models.DateField(default=timezone.datetime.today) + delivery_note_image = models.ImageField( + upload_to="ops/stock_receipts/delivery_notes/", + null=True, + blank=True, + verbose_name="Delivery note photograph", + ) comments = models.TextField() def __str__(self): diff --git a/fahari/ops/tests/test_api.py b/fahari/ops/tests/test_api.py index 0adacc3d..7d68f4b2 100644 --- a/fahari/ops/tests/test_api.py +++ b/fahari/ops/tests/test_api.py @@ -1,6 +1,7 @@ import json import random from datetime import date +from os.path import join from django.conf import settings from django.core.files.uploadedfile import SimpleUploadedFile @@ -398,26 +399,31 @@ def setUp(self): super().setUp() def test_create(self): - data = { - "facility": self.facility.pk, - "description": fake.text(), - "pack_size": fake.text(), - "delivery_note_number": fake.name()[:63], - "quantity_received": "10.0", - "batch_number": fake.name()[:63], - "expiry_date": date.today().isoformat(), - "delivery_date": date.today().isoformat(), - "comments": fake.text(), - "organisation": self.global_organisation.pk, - "commodity": self.default_commodity, - "active": False, - } - response = self.client.post(reverse("ops:stock_receipt_verification_create"), data=data) - print(response.content) - self.assertEqual( - response.status_code, - 302, - ) + with open( + join(settings.STATIC_ROOT, "images", "favicons", "android-icon-192x192.png"), "rb" + ) as image_file: + data = { + "facility": self.facility.pk, + "description": fake.text(), + "pack_size": fake.text(), + "delivery_note_number": fake.name()[:63], + "quantity_received": "10.0", + "batch_number": fake.name()[:63], + "expiry_date": date.today().isoformat(), + "delivery_date": date.today().isoformat(), + "comments": fake.text(), + "organisation": self.global_organisation.pk, + "delivery_note_image": image_file, + "commodity": self.default_commodity, + "active": False, + } + response = self.client.post( + reverse("ops:stock_receipt_verification_create"), data=data + ) + self.assertEqual( + response.status_code, + 302, + ) def test_update(self): instance = baker.make( @@ -425,28 +431,33 @@ def test_update(self): facility=self.facility, organisation=self.global_organisation, ) - data = { - "pk": instance.pk, - "facility": self.facility.pk, - "description": fake.text(), - "pack_size": fake.text(), - "delivery_note_number": fake.name()[:63], - "quantity_received": "10.0", - "batch_number": fake.name()[:63], - "expiry_date": date.today().isoformat(), - "delivery_date": date.today().isoformat(), - "comments": fake.text(), - "organisation": self.global_organisation.pk, - "commodity": self.default_commodity, - "active": False, - } - response = self.client.post( - reverse("ops:stock_receipt_verification_update", kwargs={"pk": instance.pk}), data=data - ) - self.assertEqual( - response.status_code, - 302, - ) + with open( + join(settings.STATIC_ROOT, "images", "favicons", "android-icon-192x192.png"), "rb" + ) as image_file: + data = { + "pk": instance.pk, + "facility": self.facility.pk, + "description": fake.text(), + "pack_size": fake.text(), + "delivery_note_number": fake.name()[:63], + "quantity_received": "10.0", + "batch_number": fake.name()[:63], + "expiry_date": date.today().isoformat(), + "delivery_date": date.today().isoformat(), + "comments": fake.text(), + "organisation": self.global_organisation.pk, + "delivery_note_image": image_file, + "commodity": self.default_commodity, + "active": False, + } + response = self.client.post( + reverse("ops:stock_receipt_verification_update", kwargs={"pk": instance.pk}), + data=data, + ) + self.assertEqual( + response.status_code, + 302, + ) def test_delete(self): instance = baker.make(