def cp_structure_valid(i): if i.country_programme and i.agreement.agreement_type == i.agreement.PCA \ and i.country_programme != i.agreement.country_programme: raise BasicValidationError( _('The Country Programme selected on this PD is not the same as the ' 'Country Programme selected on the Agreement, ' 'please select "{}"'.format(i.agreement.country_programme))) return True
def signatures_valid(agreement): today = date.today() unicef_signing_requirements = [agreement.signed_by_unicef_date] partner_signing_requirements = [ agreement.signed_by_partner_date, agreement.partner_manager ] if agreement.agreement_type == agreement.SSFA: if any(unicef_signing_requirements + partner_signing_requirements): raise BasicValidationError( _('SSFA signatures are captured at the Document (TOR) level, please clear the ' 'signatures and dates and add them to the TOR')) if (agreement.signed_by_partner_date and agreement.signed_by_partner_date > today) or \ (agreement.signed_by_unicef_date and agreement.signed_by_unicef_date > today): raise BasicValidationError( _('None of the signatures can be dated in the future')) return True
def ssfa_static(agreement): if agreement.agreement_type == agreement.SSFA: if agreement.interventions.all().exists(): # there should be only one.. there is a different validation that ensures this intervention = agreement.interventions.all().first() if intervention.start != agreement.start or intervention.end != agreement.end: raise BasicValidationError( _("Start and end dates don't match the Document's start and end" )) return True
def ssfa_agreement_has_no_other_intervention(i): ''' checks if SSFA intervention has an SSFA agreement connected. also checks if it's the only intervention for that ssfa agreement ''' if i.document_type == i.SSFA: if not (i.agreement.agreement_type == i.agreement.SSFA): raise BasicValidationError( _('Agreement selected is not of type SSFA')) return i.agreement.interventions.all().count() <= 1 return True
def sections_valid(i): ainds = AppliedIndicator.objects.filter( lower_result__result_link__intervention__pk=i.pk).all() ind_sections = set() for ind in ainds: ind_sections.add(ind.section) intervention_sections = set(s for s in i.sections.all()) if not ind_sections.issubset(intervention_sections): draft_status_err = ' without deleting the indicators first' if i.status == i.DRAFT else '' raise BasicValidationError( _('The following sections have been selected on ' 'the PD/SSFA indicators and cannot be removed{}: '.format( draft_status_err)) + ', '.join([s.name for s in ind_sections - intervention_sections])) return True
def signatures_valid(agreement): today = date.today() # temporary remove this validation as it's creating issues for old SSFAs # unicef_signing_requirements = [agreement.signed_by_unicef_date] # partner_signing_requirements = [agreement.signed_by_partner_date, agreement.partner_manager] # if agreement.agreement_type == agreement.SSFA: # if any(unicef_signing_requirements + partner_signing_requirements): # raise BasicValidationError(_('SSFA signatures are captured at the Document (TOR) level, please clear the ' # 'signatures and dates and add them to the TOR')) if (agreement.signed_by_partner_date and agreement.signed_by_partner_date > today) or \ (agreement.signed_by_unicef_date and agreement.signed_by_unicef_date > today): raise BasicValidationError( _('None of the signatures can be dated in the future')) return True
def locations_valid(i): ainds = AppliedIndicator.objects.filter( lower_result__result_link__intervention__pk=i.pk).all() ind_locations = set() for ind in ainds: for l in ind.locations.all(): ind_locations.add(l) intervention_locations = set(i.flat_locations.all()) if not ind_locations.issubset(intervention_locations): raise BasicValidationError( _('The following locations have been selected on ' 'the PD/SSFA indicators and cannot be removed' ' without removing them from the indicators first: ') + ', '.join([str(l) for l in ind_locations - intervention_locations])) return True