diff --git a/hypha/apply/activity/messaging.py b/hypha/apply/activity/messaging.py index 2c7e705561bc78ce7eda510adf8c8b1ab7430845..07d56b18c26a36e4fae32d564a002514b118a4d0 100644 --- a/hypha/apply/activity/messaging.py +++ b/hypha/apply/activity/messaging.py @@ -18,7 +18,9 @@ from hypha.apply.projects.models.payment import ( CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, + CONVERTED, DECLINED, + PAID, RESUBMITTED, SUBMITTED, ) @@ -509,7 +511,10 @@ class SlackAdapter(AdapterBase): recipients.append(self.slack_id(submission.assigned.with_roles().last().reviewer)) if message_type == MESSAGES.UPDATE_INVOICE_STATUS: - if related.status in [SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_2]: + if related.status in [ + SUBMITTED, RESUBMITTED, CHANGES_REQUESTED_BY_FINANCE_1, + APPROVED_BY_FINANCE_2, CONVERTED, PAID + ]: # Notify project lead/staff return recipients if related.status in [APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_2]: diff --git a/hypha/apply/dashboard/views.py b/hypha/apply/dashboard/views.py index ac7a22f69742c0ee3453ac163546ea4002e84a6c..ce36d1899091aaf8ebc03afb39fc3bd5fbdd2b76 100644 --- a/hypha/apply/dashboard/views.py +++ b/hypha/apply/dashboard/views.py @@ -162,7 +162,7 @@ class FinanceDashboardView(MyFlaggedMixin, TemplateView): def active_invoices(self): if self.request.user.is_finance_level_2: - invoices = Invoice.objects.approved_by_finance_1() + invoices = Invoice.objects.for_finance_2() else: invoices = Invoice.objects.for_finance_1() diff --git a/hypha/apply/projects/forms/payment.py b/hypha/apply/projects/forms/payment.py index 3f4a46826cb8589919b3c3aca252a7a0d09b0801..0d16ff7c40a25539caebd85c74dd60b5348009e8 100644 --- a/hypha/apply/projects/forms/payment.py +++ b/hypha/apply/projects/forms/payment.py @@ -16,8 +16,10 @@ from ..models.payment import ( CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, + CONVERTED, DECLINED, INVOICE_STATUS_CHOICES, + PAID, RESUBMITTED, SUBMITTED, Invoice, @@ -61,6 +63,8 @@ class ChangeInvoiceStatusForm(forms.ModelForm): user_choices ), APPROVED_BY_FINANCE_1: filter_request_choices([CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2], user_choices), + APPROVED_BY_FINANCE_2: filter_request_choices([CONVERTED, PAID], user_choices), + CONVERTED: filter_request_choices([PAID], user_choices), } status_field.choices = possible_status_transitions_lut.get(instance.status, []) @@ -74,37 +78,25 @@ class ChangeInvoiceStatusForm(forms.ModelForm): class InvoiceBaseForm(forms.ModelForm): class Meta: - fields = ['date_from', 'date_to', 'amount', 'document', 'message_for_pm'] + fields = ['document', 'message_for_pm'] model = Invoice - widgets = { - 'date_from': forms.DateInput, - 'date_to': forms.DateInput, - } def __init__(self, user=None, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields['amount'].widget.attrs['min'] = 0 self.initial['message_for_pm'] = '' - def clean(self): - cleaned_data = super().clean() - date_from = cleaned_data['date_from'] - date_to = cleaned_data['date_to'] - - if date_from > date_to: - self.add_error('date_from', _('Date From must be before Date To')) - - return cleaned_data - class CreateInvoiceForm(FileFormMixin, InvoiceBaseForm): - document = SingleFileField(label='Invoice File', required=True) + document = SingleFileField( + label='Invoice File', required=True, + help_text=_('The invoice must be a PDF.') + ) supporting_documents = MultiFileField( required=False, help_text=_('Files that are related to the invoice. They could be xls, microsoft office documents, open office documents, pdfs, txt files.') ) - field_order = ['date_from', 'date_to', 'amount', 'document', 'supporting_documents', 'message_for_pm'] + field_order = ['document', 'supporting_documents', 'message_for_pm'] def save(self, commit=True): invoice = super().save(commit=commit) @@ -123,7 +115,7 @@ class EditInvoiceForm(FileFormMixin, InvoiceBaseForm): document = SingleFileField(label=_('Invoice File'), required=True) supporting_documents = MultiFileField(required=False) - field_order = ['date_from', 'date_to', 'amount', 'document', 'supporting_documents', 'message_for_pm'] + field_order = ['document', 'supporting_documents', 'message_for_pm'] @transaction.atomic def save(self, commit=True): diff --git a/hypha/apply/projects/migrations/0050_add_new_invoice_status.py b/hypha/apply/projects/migrations/0050_add_new_invoice_status.py new file mode 100644 index 0000000000000000000000000000000000000000..ebb9bfbf690b91a2ced19ddc019d2ec513268b73 --- /dev/null +++ b/hypha/apply/projects/migrations/0050_add_new_invoice_status.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-04-06 07:12 + +from django.db import migrations +import django_fsm + + +class Migration(migrations.Migration): + + dependencies = [ + ('application_projects', '0049_add_fields_for_finance_integrations'), + ] + + operations = [ + migrations.AlterField( + model_name='invoice', + name='status', + field=django_fsm.FSMField(choices=[('submitted', 'Submitted'), ('resubmitted', 'Resubmitted'), ('changes_requested_staff', 'Changes Requested by Staff'), ('changes_requested_finance_1', 'Changes Requested by Finance 1'), ('changes_requested_finance_2', 'Changes Requested by Finance 2'), ('approved_by_staff', 'Approved by Staff'), ('approved_by_finance_1', 'Approved by Finance 1'), ('approved_by_finance_2', 'Approved by Finance 2'), ('paid', 'Paid'), ('converted', 'Converted'), ('declined', 'Declined')], default='submitted', max_length=50), + ), + ] diff --git a/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py b/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py new file mode 100644 index 0000000000000000000000000000000000000000..11ad637d548ba6d70e8286efcb3f98d24703c04d --- /dev/null +++ b/hypha/apply/projects/migrations/0051_remove_unnecessary_fields_from_invoice.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2022-04-12 05:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('application_projects', '0050_add_new_invoice_status'), + ] + + operations = [ + migrations.RemoveField( + model_name='invoice', + name='amount', + ), + migrations.RemoveField( + model_name='invoice', + name='date_from', + ), + migrations.RemoveField( + model_name='invoice', + name='date_to', + ), + ] diff --git a/hypha/apply/projects/models/payment.py b/hypha/apply/projects/models/payment.py index 32338b78564525c48000f4ef1beaeed642183d65..ffbf79f448dfa0b8bfba2a9bcc9b9ae1a6954f2a 100644 --- a/hypha/apply/projects/models/payment.py +++ b/hypha/apply/projects/models/payment.py @@ -1,5 +1,6 @@ import decimal import os +from textwrap import wrap from django.conf import settings from django.core.validators import MinValueValidator @@ -22,6 +23,7 @@ CHANGES_REQUESTED_BY_FINANCE_2 = 'changes_requested_finance_2' APPROVED_BY_STAFF = 'approved_by_staff' APPROVED_BY_FINANCE_1 = 'approved_by_finance_1' APPROVED_BY_FINANCE_2 = 'approved_by_finance_2' +CONVERTED = 'converted' PAID = 'paid' DECLINED = 'declined' @@ -35,6 +37,7 @@ INVOICE_STATUS_CHOICES = [ (APPROVED_BY_FINANCE_1, _('Approved by Finance 1')), (APPROVED_BY_FINANCE_2, _('Approved by Finance 2')), (PAID, _('Paid')), + (CONVERTED, _('Converted')), (DECLINED, _('Declined')), ] @@ -46,7 +49,7 @@ INVOICE_TRANISTION_TO_RESUBMITTED = [ INVOICE_STATUS_PM_CHOICES = [CHANGES_REQUESTED_BY_STAFF, APPROVED_BY_STAFF, DECLINED] INVOICE_STATUS_FINANCE_1_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_1, APPROVED_BY_FINANCE_1] -INVOICE_STATUS_FINANCE_2_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2, PAID] +INVOICE_STATUS_FINANCE_2_CHOICES = [CHANGES_REQUESTED_BY_FINANCE_2, APPROVED_BY_FINANCE_2, CONVERTED, PAID] def invoice_status_user_choices(user): @@ -76,6 +79,9 @@ class InvoiceQueryset(models.QuerySet): def for_finance_1(self): return self.filter(status__in=[APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_2]) + def for_finance_2(self): + return self.filter(status__in=[APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED]) + def rejected(self): return self.filter(status=DECLINED) @@ -116,14 +122,6 @@ class InvoiceDeliverable(models.Model): class Invoice(models.Model): project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name="invoices") by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="invoices") - date_from = models.DateTimeField() - date_to = models.DateTimeField() - amount = models.DecimalField( - default=0, - max_digits=10, - decimal_places=2, - validators=[MinValueValidator(decimal.Decimal('0.01'))], - ) paid_value = models.DecimalField( max_digits=10, decimal_places=2, @@ -176,8 +174,8 @@ class Invoice(models.Model): Formatting should be HP###### i.e. HP000001 and so on. ''' - prefix = 'HP' - return prefix + f"{self.id:06}" + prefix = 'HP-' + return prefix + '-'.join(wrap(f"{self.id:06}", 3)) def can_user_delete(self, user): if user.is_applicant or user.is_apply_staff or user.is_finance_level_1 or user.is_finance_level_2 or user.is_contracting: @@ -224,7 +222,7 @@ class Invoice(models.Model): return True if user.is_finance_level_2: - if self.status in {APPROVED_BY_FINANCE_1}: + if self.status in {APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED}: return True return False @@ -256,7 +254,7 @@ class Invoice(models.Model): @property def value(self): - return self.paid_value or self.amount + return self.paid_value def get_absolute_url(self): return reverse( diff --git a/hypha/apply/projects/tables.py b/hypha/apply/projects/tables.py index c1cbfcc58314886f2892cfa39e7aa15149603ec7..2060685c90be84cb57ca169be4bce31341441da8 100644 --- a/hypha/apply/projects/tables.py +++ b/hypha/apply/projects/tables.py @@ -11,31 +11,29 @@ from .models import Invoice, Project, Report class BaseInvoiceTable(tables.Table): - project = tables.LinkColumn( + vendor_document_number = tables.LinkColumn( 'funds:projects:invoice-detail', - verbose_name=_('Invoice reference'), - text=lambda r: textwrap.shorten(r.project.title, width=30, placeholder="..."), + verbose_name=_('Invoice Number'), args=[tables.utils.A('project.pk'), tables.utils.A('pk')], ) + project = tables.Column( + verbose_name=_('Project Name') + ) status = tables.Column() requested_at = tables.DateColumn(verbose_name=_('Submitted')) - amount = tables.Column(verbose_name=_('Value ({currency})').format(currency=settings.CURRENCY_SYMBOL)) - def render_amount(self, value): - return intcomma(value) + def render_project(self, value): + text = textwrap.shorten(value.title, width=30, placeholder="..."), + return text[0] class InvoiceDashboardTable(BaseInvoiceTable): - date_from = tables.DateColumn(verbose_name=_('Period Start')) - date_to = tables.DateColumn(verbose_name=_('Period End')) - class Meta: fields = [ 'requested_at', - 'project', + 'vendor_document_number', 'status', - 'date_from', - 'date_to', + 'project', ] model = Invoice order_by = ['-requested_at'] @@ -49,9 +47,9 @@ class InvoiceListTable(BaseInvoiceTable): class Meta: fields = [ 'requested_at', - 'project', - 'amount', + 'vendor_document_number', 'status', + 'project', 'lead', 'fund', ] @@ -60,13 +58,6 @@ class InvoiceListTable(BaseInvoiceTable): order_by = ['-requested_at'] attrs = {'class': 'invoices-table'} - def order_value(self, qs, is_descending): - direction = '-' if is_descending else '' - - qs = qs.order_by(f'{direction}paid_value', f'{direction}amount') - - return qs, True - class BaseProjectsTable(tables.Table): title = tables.LinkColumn( diff --git a/hypha/apply/projects/templates/application_projects/includes/invoices.html b/hypha/apply/projects/templates/application_projects/includes/invoices.html index d8834fc3295d8c7a44cdd28e3bec65ad57516e25..53f958d05c18ed338bacf19e014bdfceab948769 100644 --- a/hypha/apply/projects/templates/application_projects/includes/invoices.html +++ b/hypha/apply/projects/templates/application_projects/includes/invoices.html @@ -12,20 +12,18 @@ <table class="data-block__table"> <thead> <tr> - <th class="data-block__table-amount">{% trans "Amount" %} ({{ CURRENCY_SYMBOL }})</th> - <th class="data-block__table-status">{% trans "Status" %}</th> - <th class="data-block__table-date">{% trans "From" %}</th> - <th class="data-block__table-date">{% trans "To" %}</th> + <th class="data-block__table-amount">{% trans "Submitted" %}</th> + <th class="data-block__table-status">{% trans "Invoice Number" %}</th> + <th class="data-block__table-date">{% trans "Status" %}</th> <th class="data-block__table-update"></th> </tr> </thead> <tbody> {% for invoice in object.invoices.not_rejected %} <tr> - <td><span class="data-block__mobile-label">{% trans "Amount" %}: </span>{{ invoice.amount|intcomma }}</td> + <td><span class="data-block__mobile-label">{% trans "Submitted" %}: </span>{{ invoice.requested_at.date }}</td> + <td><span class="data-block__mobile-label">{% trans "Invoice Number" %}: </span>{{ invoice.vendor_document_number }}</td> <td><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice.get_status_display }}</td> - <td><span class="data-block__mobile-label">{% trans "From" %}: </span>{{ invoice.date_from.date }}</td> - <td><span class="data-block__mobile-label">{% trans "To" %}: </span>{{ invoice.date_to.date }}</td> <td> <a class="data-block__action-link" href="{{ invoice.get_absolute_url }}">View</a> {% can_edit invoice user as user_can_edit_request %} @@ -59,7 +57,8 @@ <table class="data-block__table is-hidden js-payment-block-rejected-table"> <thead> <tr> - <th class="data-block__table-amount">{% trans "Amount" %}</th> + <th class="data-block__table-amount">{% trans "Submitted" %}</th> + <th class="data-block__table-amount">{% trans "Invoice Number" %}</th> <th class="data-block__table-status">{% trans "Status" %}</th> <th class="data-block__table-view"></th> </tr> @@ -67,7 +66,8 @@ <tbody> {% for invoice in object.invoices.rejected %} <tr> - <td><span class="data-block__mobile-label">{% trans "Amount" %}: </span>{{ CURRENCY_SYMBOL }}{{ invoice.value }}</td> + <td><span class="data-block__mobile-label">{% trans "Submitted" %}: </span>{{ invoice.requested_at.date }}</td> + <td><span class="data-block__mobile-label">{% trans "Invoice Number" %}: </span>{{ invoice.vendor_document_number }}</td> <td><span class="data-block__mobile-label">{% trans "Status" %}: </span>{{ invoice.get_status_display }}</td> <td><a href="{{ invoice.get_absolute_url }}">{% trans "View" %}</a></td> </tr> diff --git a/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html b/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html index 6d056588b2147a88d5a65ddb3a73c43e5fc72b60..2ad489d5eef377017ddbc0280f85a65fbd54c77e 100644 --- a/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html +++ b/hypha/apply/projects/templates/application_projects/invoice_confirm_delete.html @@ -20,8 +20,6 @@ <p class="card__text"><b>{% trans "Status" %}:</b> {{ object.get_status_display }}</p> <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p> <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.pk }}</p> - <p class="card__text"><b>{% trans "Period of Performance" %}:</b> {{ object.date_from.date }} | {{ object.date_to.date }}</p> - <p class="card__text"><b>{% trans "Total" %}:</b> {{ CURRENCY_SYMBOL }}{{ object.amount|intcomma }}</p> </div> <div class="card card--solid"> diff --git a/hypha/apply/projects/templates/application_projects/invoice_detail.html b/hypha/apply/projects/templates/application_projects/invoice_detail.html index 7ea20670fdb92cf4ee7cde1cbffcc8b83bca8919..bef8d68bfbf2d256eb57ea83028e15928cf491d4 100644 --- a/hypha/apply/projects/templates/application_projects/invoice_detail.html +++ b/hypha/apply/projects/templates/application_projects/invoice_detail.html @@ -18,9 +18,7 @@ <div class="card card--solid"> <p class="card__text"><b>{% trans "Status" %}:</b> {{ object.get_status_display }}</p> <p class="card__text"><b>{% trans "Vendor" %}:</b> {{ object.project.vendor.name }}</p> - <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.pk }}</p> - <p class="card__text"><b>{% trans "Period of Performance" %}:</b> {{ object.date_from.date }} | {{ object.date_to.date }}</p> - <p class="card__text"><b>{% trans "Total" %}:</b> {{ CURRENCY_SYMBOL }}{{ object.amount|intcomma }}</p> + <p class="card__text"><b>{% trans "Invoice Number" %}:</b> {{ object.vendor_document_number }}</p> </div> <div class="card card--solid"> diff --git a/hypha/apply/projects/tests/factories.py b/hypha/apply/projects/tests/factories.py index a5e386f967a213a7e6c217ee4ec9ac4635f57aa4..a1e710afb1f5836c98606f814241e4dafc1d40db 100644 --- a/hypha/apply/projects/tests/factories.py +++ b/hypha/apply/projects/tests/factories.py @@ -1,7 +1,6 @@ import decimal import factory -import pytz from dateutil.relativedelta import relativedelta from django.utils import timezone @@ -107,11 +106,6 @@ class PacketFileFactory(factory.django.DjangoModelFactory): class InvoiceFactory(factory.django.DjangoModelFactory): project = factory.SubFactory(ProjectFactory) by = factory.SubFactory(UserFactory) - amount = factory.Faker('pydecimal', min_value=1, max_value=10000000, right_digits=2) - - date_from = factory.Faker('date_time').evaluate(None, None, {'tzinfo': pytz.utc, 'locale': None}) - date_to = factory.Faker('date_time').evaluate(None, None, {'tzinfo': pytz.utc, 'locale': None}) - document = factory.django.FileField() class Meta: diff --git a/hypha/apply/projects/tests/test_forms.py b/hypha/apply/projects/tests/test_forms.py index d4d5bb883afd7ecf0d4bcf15ec14bfcb08b0a386..769a3d6619da6349ee70d3531e1fe057f9f6c151 100644 --- a/hypha/apply/projects/tests/test_forms.py +++ b/hypha/apply/projects/tests/test_forms.py @@ -287,10 +287,7 @@ class TestCreateInvoiceForm(TestCase): def test_adding_invoice(self): data = { 'paid_value': '10', - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', - 'amount': 100.0 } document = SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read()) @@ -314,10 +311,7 @@ class TestCreateInvoiceForm(TestCase): def test_supporting_documents_not_required(self): data = { 'paid_value': '10', - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', - 'amount': 100 } @@ -335,38 +329,6 @@ class TestCreateInvoiceForm(TestCase): self.assertEqual(invoice.supporting_documents.count(), 0) - def test_invoice_dates_are_correct(self): - invoice = SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read()) - files = { - 'document': invoice, - } - - form = CreateInvoiceForm( - files=files, - data={ - 'paid_value': '10', - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', - 'comment': 'test comment', - 'amount': 100 - - } - ) - self.assertTrue(form.is_valid(), msg=form.errors) - - form = CreateInvoiceForm( - files=files, - data={ - 'paid_value': '10', - 'date_from': '2019-08-15', - 'date_to': '2018-08-15', - 'comment': 'test comment', - 'amount': 100 - - } - ) - self.assertFalse(form.is_valid()) - class TestEditInvoiceForm(TestCase): @@ -379,9 +341,6 @@ class TestEditInvoiceForm(TestCase): data={ 'document': invoice.document, 'supporting_documents-uploads': '[]', - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', - 'amount': invoice.amount, }, files={ 'supporting_documents': [], @@ -405,9 +364,6 @@ class TestEditInvoiceForm(TestCase): "size": supporting_document.document.size, "type": "existing"}] ), - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', - 'amount': invoice.amount, }, instance=invoice) self.assertTrue(form.is_valid()) @@ -424,9 +380,6 @@ class TestEditInvoiceForm(TestCase): data={ 'document': invoice.document, 'supporting_documents-uploads': '[]', - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', - 'amount': invoice.amount, }, files={ 'supporting_documents': supporting_document, diff --git a/hypha/apply/projects/tests/test_models.py b/hypha/apply/projects/tests/test_models.py index 4ee923a46858a851ad445591e24d494a107e88a0..92c442a376833643d27142f0fa71c6da12c18ccb 100644 --- a/hypha/apply/projects/tests/test_models.py +++ b/hypha/apply/projects/tests/test_models.py @@ -19,6 +19,7 @@ from ..models.payment import ( CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, + CONVERTED, DECLINED, INVOICE_STATUS_FINANCE_1_CHOICES, INVOICE_STATUS_FINANCE_2_CHOICES, @@ -236,7 +237,7 @@ class TestInvoiceModel(TestCase): self.assertFalse(invoice.can_user_change_status(user)) def test_finance2_can_change_status(self): - statuses = [APPROVED_BY_FINANCE_1] + statuses = [APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, CONVERTED] user = Finance2Factory() for status in statuses: invoice = InvoiceFactory(status=status) @@ -244,7 +245,7 @@ class TestInvoiceModel(TestCase): def test_finance2_cant_change_status(self): statuses = [ - APPROVED_BY_STAFF, APPROVED_BY_FINANCE_2, CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, + APPROVED_BY_STAFF, CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2, CHANGES_REQUESTED_BY_STAFF, DECLINED, PAID, RESUBMITTED, SUBMITTED ] user = Finance2Factory() diff --git a/hypha/apply/projects/tests/test_views.py b/hypha/apply/projects/tests/test_views.py index 0575d7d673db6d5328fb9ee08445b9e67dbad2fe..d8c1c6e1d934b9b134b4fd693b9b3b1fed9ca9e5 100644 --- a/hypha/apply/projects/tests/test_views.py +++ b/hypha/apply/projects/tests/test_views.py @@ -1,5 +1,4 @@ import json -from decimal import Decimal from io import BytesIO from dateutil.relativedelta import relativedelta @@ -814,9 +813,6 @@ class TestApplicantEditInvoiceView(BaseViewTestCase): self.assertTrue(invoice.supporting_documents.exists()) response = self.post_page(invoice, { - 'amount': invoice.amount, - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', 'invoice': '', 'supporting_documents-uploads': '[]', @@ -830,12 +826,7 @@ class TestApplicantEditInvoiceView(BaseViewTestCase): invoice = InvoiceFactory(project=project) supporting_document = SupportingDocumentFactory(invoice=invoice) - amount = invoice.amount - response = self.post_page(invoice, { - 'amount': amount + 1, - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', 'invoice': '', 'supporting_documents-uploads': json.dumps([{"name": supporting_document.document.name, "size": supporting_document.document.size, "type": "existing"}]), @@ -847,8 +838,6 @@ class TestApplicantEditInvoiceView(BaseViewTestCase): invoice.refresh_from_db() self.assertEqual(project.invoices.first().pk, invoice.pk) - - self.assertEqual(amount + Decimal("1"), invoice.amount) self.assertEqual(invoice.supporting_documents.first().document, supporting_document.document) @@ -868,9 +857,6 @@ class TestStaffEditInvoiceView(BaseViewTestCase): SupportingDocumentFactory(invoice=invoice) response = self.post_page(invoice, { - 'amount': invoice.amount, - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', 'invoice': '', 'supporting_documents-uploads': '[]', @@ -885,15 +871,10 @@ class TestStaffEditInvoiceView(BaseViewTestCase): invoice = InvoiceFactory(project=project) supporting_document = SupportingDocumentFactory(invoice=invoice) - amount = invoice.amount - document = BytesIO(b'somebinarydata') document.name = 'invoice.pdf' response = self.post_page(invoice, { - 'amount': amount + 1, - 'date_from': '2018-08-15', - 'date_to': '2019-08-15', 'comment': 'test comment', 'document': document, 'supporting_documents-uploads': json.dumps([{"name": supporting_document.document.name, "size": supporting_document.document.size, "type": "existing"}]), @@ -906,7 +887,6 @@ class TestStaffEditInvoiceView(BaseViewTestCase): self.assertEqual(project.invoices.first().pk, invoice.pk) - self.assertEqual(amount + Decimal("1"), invoice.amount) self.assertEqual(invoice.supporting_documents.first().document, supporting_document.document) diff --git a/hypha/apply/projects/views/payment.py b/hypha/apply/projects/views/payment.py index 74c464d5b6fd91ef94a404c68d014471984dce5f..c7f20fd13a9d706281d62cfe5640ba2164e316c5 100644 --- a/hypha/apply/projects/views/payment.py +++ b/hypha/apply/projects/views/payment.py @@ -273,6 +273,3 @@ class InvoiceListView(SingleTableMixin, FilterView): model = Invoice table_class = InvoiceListTable template_name = 'application_projects/invoice_list.html' - - def get_queryset(self): - return Invoice.objects.order_by('date_to') diff --git a/hypha/apply/projects/views/project.py b/hypha/apply/projects/views/project.py index 0bc20a25b5412743d83651d0da37320183d4bf33..66f2b283f5a1065fae3e26fcbf7b8858f73f1335 100644 --- a/hypha/apply/projects/views/project.py +++ b/hypha/apply/projects/views/project.py @@ -642,7 +642,7 @@ class ProjectOverviewView(TemplateView): } def get_invoices(self, request): - invoices = Invoice.objects.order_by('date_to')[:10] + invoices = Invoice.objects.order_by('-requested_at')[:10] return { 'filterset': InvoiceListFilter(request.GET or None, request=request, queryset=invoices),