Revision d4fc6292

b/snf-astakos-app/astakos/im/functions.py
503 503
    project_id = get_project_id_of_application_id(project_application_id)
504 504
    return do_accept_membership(project_id, user, request_user)
505 505

  
506
def do_accept_membership_checks(project, request_user):
506
def do_accept_membership_checks(project, membership, request_user):
507 507
    checkAllowed(project, request_user)
508 508
    checkAlive(project)
509 509

  
......
514 514
    if project.violates_members_limit(adding=1):
515 515
        raise PermissionDenied(_(astakos_messages.MEMBER_NUMBER_LIMIT_REACHED))
516 516

  
517
    if membership != ProjectMembership.REQUESTED:
518
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
519
        raise PermissionDenied(m)
520

  
517 521
def do_accept_membership(project_id, user, request_user=None):
518 522
    project = get_project_for_update(project_id)
519
    do_accept_membership_checks(project, request_user)
520

  
521 523
    membership = get_membership_for_update(project, user)
524
    do_accept_membership_checks(project, membership, request_user)
525

  
522 526
    membership.accept()
523 527
    sync_projects()
524 528

  
......
535 539
    project_id = get_project_id_of_application_id(project_application_id)
536 540
    return do_reject_membership(project_id, user, request_user)
537 541

  
538
def do_reject_membership_checks(project, request_user):
542
def do_reject_membership_checks(project, membership, request_user):
539 543
    checkAllowed(project, request_user)
540 544
    checkAlive(project)
541 545

  
546
    if membership != ProjectMembership.REQUESTED:
547
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
548
        raise PermissionDenied(m)
549

  
542 550
def do_reject_membership(project_id, user, request_user=None):
543 551
    project = get_project_for_update(project_id)
544
    do_reject_membership_checks(project, request_user)
545

  
546 552
    membership = get_membership_for_update(project, user)
553
    do_reject_membership_checks(project, membership, request_user)
554

  
547 555
    membership.reject()
548 556

  
549 557
    membership_change_notify(project, membership.person, 'rejected')
......
567 575
    if leave_policy == CLOSED_POLICY:
568 576
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
569 577

  
578
    if membership.state not in ProjectMembership.ACCEPTED_STATES:
579
        m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP)
580
        raise PermissionDenied(m)
581

  
570 582
def do_remove_membership(project_id, user, request_user=None):
571 583
    project = get_project_for_update(project_id)
572
    do_remove_membership_checks(project, request_user)
573

  
574 584
    membership = get_membership_for_update(project, user)
585
    do_remove_membership_checks(project, membership, request_user)
586

  
575 587
    membership.remove()
576 588
    sync_projects()
577 589

  
......
585 597

  
586 598
def do_enroll_member(project_id, user, request_user=None):
587 599
    project = get_project_for_update(project_id)
588
    do_accept_membership_checks(project, request_user)
589

  
590 600
    membership = create_membership(project_id, user)
601
    do_accept_membership_checks(project, membership, request_user)
602

  
591 603
    membership.accept()
592 604
    sync_projects()
593 605

  
......
603 615
    project_id = get_project_id_of_application_id(project_application_id)
604 616
    return do_leave_project(project_id, user_id)
605 617

  
606
def do_leave_project_checks(project):
618
def do_leave_project_checks(project, membership):
607 619
    checkAlive(project)
608 620

  
609 621
    leave_policy = project.application.member_leave_policy
610 622
    if leave_policy == CLOSED_POLICY:
611 623
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
612 624

  
625
    if membership.state not in ProjectMembership.ACCEPTED_STATES:
626
        m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP)
627
        raise PermissionDenied(m)
628

  
613 629
def do_leave_project(project_id, user_id):
614 630
    project = get_project_for_update(project_id)
615
    do_leave_project_checks(project)
616

  
617 631
    membership = get_membership_for_update(project, user_id)
632
    do_leave_project_checks(project, membership)
618 633

  
619 634
    leave_policy = project.application.member_leave_policy
620 635
    if leave_policy == AUTO_ACCEPT_POLICY:
......
643 658

  
644 659
def do_join_project(project_id, user_id):
645 660
    project = get_project_for_update(project_id)
646
    do_join_project_checks(project)
647

  
648 661
    membership = create_membership(project, user_id)
662
    do_join_project_checks(project)
649 663

  
650 664
    join_policy = project.application.member_join_policy
651 665
    if (join_policy == AUTO_ACCEPT_POLICY and
b/snf-astakos-app/astakos/im/messages.py
171 171
MEMBER_JOIN_POLICY_CLOSED               =   'The Project\'s member join policy is closed.'
172 172
MEMBER_LEAVE_POLICY_CLOSED              =   'The project\'s member leave policy is closed.'
173 173
NOT_MEMBERSHIP_REQUEST                  =   'This is not a valid membership request.'
174
NOT_ACCEPTED_MEMBERSHIP                 =   'This is not an accepted membership.'
174 175
MEMBERSHIP_REQUEST_EXISTS               =   'The membership request already exists.'
175 176
NO_APPLICANT                            =   'Project application requires an applicant. None found.'
176 177
INVALID_PROJECT_START_DATE              =   'Project start date should be equal or greater than the current date'

Also available in: Unified diff