diff --git a/partners/models.py b/partners/models.py index 966a782317001e39eb221f954b9a3b4e03110657..d8c0b21da83faa3fade57d4fcbbf8ffd902c07f7 100644 --- a/partners/models.py +++ b/partners/models.py @@ -14,22 +14,20 @@ from django.urls import reverse from django_countries.fields import CountryField -from .constants import PARTNER_KINDS, PARTNER_STATUS, CONSORTIUM_STATUS, MEMBERSHIP_DURATION,\ - PROSPECTIVE_PARTNER_STATUS, PROSPECTIVE_PARTNER_EVENTS, PARTNER_EVENTS,\ - MEMBERSHIP_AGREEMENT_STATUS, PROSPECTIVE_PARTNER_ADDED,\ - PARTNER_KIND_UNI_LIBRARY -from .constants import PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT,\ - PROSPECTIVE_PARTNER_APPROACHED,\ - PROSPECTIVE_PARTNER_EVENT_INITIATE_NEGOTIATION,\ - PROSPECTIVE_PARTNER_NEGOTIATING,\ - PROSPECTIVE_PARTNER_EVENT_MARKED_AS_UNINTERESTED,\ - PROSPECTIVE_PARTNER_UNINTERESTED,\ - PROSPECTIVE_PARTNER_EVENT_PROMOTED,\ - PROSPECTIVE_PARTNER_PROCESSED, CONTACT_TYPES,\ - PARTNER_INITIATED, REQUEST_STATUSES, REQUEST_INITIATED - -from .managers import MembershipAgreementManager, ProspectivePartnerManager, PartnerManager,\ - ContactRequestManager, PartnersAttachmentManager +from .constants import ( + PARTNER_KINDS, PARTNER_STATUS, CONSORTIUM_STATUS, MEMBERSHIP_DURATION, PARTNER_EVENTS, + PROSPECTIVE_PARTNER_STATUS, PROSPECTIVE_PARTNER_EVENTS, MEMBERSHIP_AGREEMENT_STATUS, + PROSPECTIVE_PARTNER_ADDED, PARTNER_KIND_UNI_LIBRARY) +from .constants import ( + PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT, PROSPECTIVE_PARTNER_APPROACHED, PARTNER_INITIATED, + PROSPECTIVE_PARTNER_EVENT_INITIATE_NEGOTIATION, PROSPECTIVE_PARTNER_PROCESSED, CONTACT_TYPES, + PROSPECTIVE_PARTNER_NEGOTIATING, PROSPECTIVE_PARTNER_EVENT_MARKED_AS_UNINTERESTED, + REQUEST_STATUSES, PROSPECTIVE_PARTNER_UNINTERESTED, PROSPECTIVE_PARTNER_EVENT_PROMOTED, + REQUEST_INITIATED) + +from .managers import ( + MembershipAgreementManager, ProspectivePartnerManager, PartnerManager, ContactRequestManager, + PartnersAttachmentManager) from scipost.constants import TITLE_CHOICES from scipost.fields import ChoiceArrayField @@ -44,9 +42,8 @@ now = timezone.now() ######################## class ProspectivePartner(models.Model): - """ - Created from the membership_request page, after submitting a query form. - """ + """A prospect Partner is a Partner without explicit contract with SciPost yet.""" + kind = models.CharField(max_length=32, choices=PARTNER_KINDS, default=PARTNER_KIND_UNI_LIBRARY) institution_name = models.CharField(max_length=256) country = CountryField() @@ -62,6 +59,11 @@ class ProspectivePartner(models.Model): self.date_received.strftime("%Y-%m-%d"), self.get_status_display()) + @property + def is_promoted_to_partner(self): + """Check if Prospect is already known to be a Partner.""" + return self.status == PROSPECTIVE_PARTNER_PROCESSED + def update_status_from_event(self, event): if event == PROSPECTIVE_PARTNER_EVENT_EMAIL_SENT: self.status = PROSPECTIVE_PARTNER_APPROACHED diff --git a/partners/templates/partners/_prospective_partner_card.html b/partners/templates/partners/_prospective_partner_card.html index 48c903504c317ae88d07ef63fdbd60c621bbd770..9a56f10cd941f5f431d31d4735cacc6ce8ea2402 100644 --- a/partners/templates/partners/_prospective_partner_card.html +++ b/partners/templates/partners/_prospective_partner_card.html @@ -70,10 +70,12 @@ <input type="submit" name="submit" value="Submit" class="btn btn-outline-secondary"> </form> - <h3>Partner status</h3> - <ul> - <li><a href="{% url 'partners:promote_prospartner' pp.id %}">Upgrade prospect to partner</a></li> - </ul> + {% if not pp.is_promoted_to_partner %} + <h3>Partner status</h3> + <ul> + <li><a href="{% url 'partners:promote_prospartner' pp.id %}">Upgrade prospect to partner</a></li> + </ul> + {% endif %} </div> </div> </div> diff --git a/partners/views.py b/partners/views.py index a17405729386aea2af58cb53b24854e185c9e4d0..9c5bf531d0eddab20e19d08ebb22f4480caff132 100644 --- a/partners/views.py +++ b/partners/views.py @@ -47,10 +47,11 @@ def supporting_partners(request): @login_required @permission_required('scipost.can_read_partner_page', return_403=True) def dashboard(request): - ''' + """Administration page for Partners and Prospective Partners. + This page is meant as a personal page for Partners, where they will for example be able to read their personal data and agreements. - ''' + """ context = {} try: context['personal_agreements'] = (MembershipAgreement.objects.open_to_partner() @@ -62,8 +63,8 @@ def dashboard(request): context['contact_requests_count'] = ContactRequest.objects.awaiting_processing().count() context['inactivate_contacts_count'] = Contact.objects.filter(user__is_active=False).count() context['partners'] = Partner.objects.all() - context['prospective_partners'] = (ProspectivePartner.objects.not_yet_partner() - .order_by('country', 'institution_name')) + context['prospective_partners'] = ProspectivePartner.objects.order_by( + 'country', 'institution_name') context['ppevent_form'] = ProspectivePartnerEventForm() context['agreements'] = MembershipAgreement.objects.order_by('date_requested') return render(request, 'partners/dashboard.html', context)