@Override public RuleEnrollment toMappedRuleEnrollment( ProgramInstance enrollment ) { if( enrollment == null ) { return null; } return RuleEnrollment.create( enrollment.getUid(), enrollment.getIncidentDate(), enrollment.getEnrollmentDate(), RuleEnrollment.Status.valueOf( enrollment.getStatus().toString() ), enrollment.getOrganisationUnit() != null ? enrollment.getOrganisationUnit().getUid() : "", enrollment.getEntityInstance().getTrackedEntityAttributeValues().stream().filter( Objects::nonNull ) .map( attr -> RuleAttributeValue.create( attr.getAttribute().getUid(), getTrackedEntityAttributeValue( attr ) ) ) .collect( Collectors.toList() ), enrollment.getProgram().getName() ); }
@Override public boolean canAutoCompleteProgramInstanceStatus( ProgramInstance programInstance ) { Set<ProgramStageInstance> programStageInstances = new HashSet<>( programInstance.getProgramStageInstances() ); Set<ProgramStage> programStages = new HashSet<>(); for ( ProgramStageInstance programStageInstance : programStageInstances ) { if ( (!programStageInstance.isCompleted() && programStageInstance.getStatus() != EventStatus.SKIPPED) || programStageInstance.getProgramStage().getRepeatable() ) { return false; } programStages.add( programStageInstance.getProgramStage() ); } return programStages.size() == programInstance.getProgram().getProgramStages().size(); }
/** * Updated the bi-directional associations between this program instance and * the given entity instance and program. * * @param entityInstance the entity instance to enroll. * @param program the program to enroll the entity instance to. */ public void enrollTrackedEntityInstance( TrackedEntityInstance entityInstance, Program program ) { setEntityInstance( entityInstance ); entityInstance.getProgramInstances().add( this ); setProgram( program ); }
@Override public void incompleteProgramInstanceStatus( ProgramInstance programInstance ) { Program program = programInstance.getProgram(); TrackedEntityInstance tei = programInstance.getEntityInstance(); if ( getProgramInstances( tei, program, ProgramStatus.ACTIVE ).size() > 0 ) { log.warn( "Program has another active enrollment going on. Not possible to incomplete" ); throw new IllegalQueryException( "Program has another active enrollment going on. Not possible to incomplete" ); } // ----------------------------------------------------------------- // Update program-instance // ----------------------------------------------------------------- programInstance.setStatus( ProgramStatus.ACTIVE ); updateProgramInstance( programInstance ); }
enrollment.setEnrollment( programInstance.getUid() ); List<String> errors = trackerAccessManager.canRead( user, programInstance ); if ( programInstance.getEntityInstance() != null ) enrollment.setTrackedEntityType( programInstance.getEntityInstance().getTrackedEntityType().getUid() ); enrollment.setTrackedEntityInstance( programInstance.getEntityInstance().getUid() ); if ( programInstance.getOrganisationUnit() != null ) enrollment.setOrgUnit( programInstance.getOrganisationUnit().getUid() ); enrollment.setOrgUnitName( programInstance.getOrganisationUnit().getName() ); if ( programInstance.getGeometry() != null ) enrollment.setGeometry( programInstance.getGeometry() ); if ( programInstance.getProgram().getFeatureType().equals( FeatureType.POINT ) ) com.vividsolutions.jts.geom.Coordinate co = programInstance.getGeometry().getCoordinate(); enrollment.setCoordinate( new Coordinate( co.x, co.y ) ); enrollment.setCreated( DateUtils.getIso8601NoTz( programInstance.getCreated() ) ); enrollment.setCreatedAtClient( DateUtils.getIso8601NoTz( programInstance.getCreatedAtClient() ) ); enrollment.setLastUpdated( DateUtils.getIso8601NoTz( programInstance.getLastUpdated() ) ); enrollment.setLastUpdatedAtClient( DateUtils.getIso8601NoTz( programInstance.getLastUpdatedAtClient() ) ); enrollment.setProgram( programInstance.getProgram().getUid() ); enrollment.setStatus( EnrollmentStatus.fromProgramStatus( programInstance.getStatus() ) ); enrollment.setEnrollmentDate( programInstance.getEnrollmentDate() );
programInstance.setProgram( program ); programInstance.setIncidentDate( enrollment.getIncidentDate() ); programInstance.setEnrollmentDate( enrollment.getEnrollmentDate() ); programInstance.setOrganisationUnit( organisationUnit ); programInstance.setFollowup( enrollment.getFollowup() ); if ( program.getDisplayIncidentDate() && programInstance.getIncidentDate() == null ) if ( EnrollmentStatus.fromProgramStatus( programInstance.getStatus() ) != enrollment.getStatus() ) teiService.updateTrackedEntityInstance( programInstance.getEntityInstance() );
if ( !programStage.getRepeatable() && programInstance.hasProgramStageInstance( programStage ) ) ProgramInstance pi = new ProgramInstance(); pi.setEnrollmentDate( new Date() ); pi.setIncidentDate( new Date() ); pi.setProgram( program ); pi.setStatus( ProgramStatus.ACTIVE ); pi.setStoredBy( storedBy ); program = programInstance.getProgram(); if ( !programInstance.getProgram().hasOrganisationUnit( organisationUnit ) )
@Override public ProgramInstance prepareProgramInstance( TrackedEntityInstance trackedEntityInstance, Program program, ProgramStatus programStatus, Date enrollmentDate, Date incidentDate, OrganisationUnit organisationUnit, String uid ) { if ( program.getTrackedEntityType() != null && !program.getTrackedEntityType().equals( trackedEntityInstance.getTrackedEntityType() ) ) { throw new IllegalQueryException( "Tracked entity instance must have same tracked entity as program: " + program.getUid() ); } ProgramInstance programInstance = new ProgramInstance(); programInstance.setUid( CodeGenerator.isValidUid( uid ) ? uid : CodeGenerator.generateUid() ); programInstance.setOrganisationUnit( organisationUnit ); programInstance.enrollTrackedEntityInstance( trackedEntityInstance, program ); if ( enrollmentDate != null ) { programInstance.setEnrollmentDate( enrollmentDate ); } else { programInstance.setEnrollmentDate( new Date() ); } if ( incidentDate != null ) { programInstance.setIncidentDate( incidentDate ); } else { programInstance.setIncidentDate( new Date() ); } programInstance.setStatus( programStatus ); return programInstance; }
event.setEvent( programStageInstance.getUid() ); if ( programStageInstance.getProgramInstance().getEntityInstance() != null ) event.setTrackedEntityInstance( programStageInstance.getProgramInstance().getEntityInstance().getUid() ); event.setFollowup( programStageInstance.getProgramInstance().getFollowup() ); event.setEnrollmentStatus( EnrollmentStatus.fromProgramStatus( programStageInstance.getProgramInstance().getStatus() ) ); event.setStatus( programStageInstance.getStatus() ); event.setEventDate( DateUtils.getIso8601NoTz( programStageInstance.getExecutionDate() ) ); Program program = programStageInstance.getProgramInstance().getProgram(); event.setEnrollment( programStageInstance.getProgramInstance().getUid() ); event.setProgramStage( programStageInstance.getProgramStage().getUid() ); event.setAttributeOptionCombo( programStageInstance.getAttributeOptionCombo().getUid() ); .getCategoryOptions().stream().map( CategoryOption::getUid ).collect( Collectors.toList() ) ) ); if ( programStageInstance.getProgramInstance().getEntityInstance() != null ) event.setTrackedEntityInstance( programStageInstance.getProgramInstance().getEntityInstance().getUid() );
Program program = programInstance.getProgram(); if ( !ownershipAccessManager.hasAccess( user, programInstance.getEntityInstance(), program ) ) OrganisationUnit ou = programInstance.getOrganisationUnit(); if ( ou != null )
ProgramInstance pi = new ProgramInstance(); pi.setEnrollmentDate( new Date() ); pi.setIncidentDate( new Date() ); pi.setProgram( smsCommand.getProgram() ); pi.setStatus( ProgramStatus.ACTIVE );
private ProgramMessageRecipients resolveProgramNotificationRecipients( ProgramNotificationTemplate template, OrganisationUnit organisationUnit, ProgramInstance programInstance ) { return resolveRecipients( template, organisationUnit, programInstance.getEntityInstance(), programInstance ); }
private List<ImportConflict> isAllowedToDelete( User user, ProgramInstance pi ) { List<ImportConflict> importConflicts = new ArrayList<>(); Set<ProgramStageInstance> notDeletedProgramStageInstances = pi.getProgramStageInstances().stream() .filter( psi -> !psi.isDeleted() ) .collect( Collectors.toSet() ); if ( !notDeletedProgramStageInstances.isEmpty() && !user.isAuthorized( Authorities.F_ENROLLMENT_CASCADE_DELETE.getAuthority() ) ) { importConflicts.add( new ImportConflict( pi.getUid(), "Enrollment " + pi.getUid() + " cannot be deleted as it has associated events and user does not have authority: " + Authorities.F_ENROLLMENT_CASCADE_DELETE.getAuthority() ) ); } List<String> errors = trackerAccessManager.canWrite( user, pi ); if ( !errors.isEmpty() ) { errors.forEach( error -> importConflicts.add( new ImportConflict( pi.getUid(), error ) ) ); } return importConflicts; } }
protected String generateKey( ProgramNotificationTemplate template, ProgramInstance programInstance ) { return template.getUid() + programInstance.getUid(); }
private Set<ProgramNotificationTemplate> resolveTemplates( ProgramInstance programInstance, final NotificationTrigger trigger ) { return programInstance.getProgram().getNotificationTemplates().stream() .filter( t -> t.getNotificationTrigger() == trigger ) .collect( Collectors.toSet() ); }
new ProgramInstance( program, daoTrackedEntityInstance, organisationUnit ) ); updateAttributeValues( enrollment, importOptions ); updateDateFields( enrollment, programInstance ); programInstance.setFollowup( enrollment.getFollowup() ); programInstance.setStoredBy( storedBy ); importSummary.setReference( programInstance.getUid() ); importSummary.getImportCount().incrementImported();
importSummary.setReference( programInstance.getUid() ); importSummary.getConflicts().addAll( importConflicts ); importSummary.incrementIgnored(); teiService.updateTrackedEntityInstance( programInstance.getEntityInstance() );
Date currentDate = today.getTime(); programInstance.setEndDate( currentDate ); programInstance.setStatus( ProgramStatus.CANCELLED ); updateProgramInstance( programInstance ); for ( ProgramStageInstance programStageInstance : programInstance.getProgramStageInstances() )
private void saveTrackedEntityComment( ProgramInstance programInstance, Enrollment enrollment, String storedBy ) { for ( Note note : enrollment.getNotes() ) { String noteUid = CodeGenerator.isValidUid( note.getNote() ) ? note.getNote() : CodeGenerator.generateUid(); if ( !commentService.trackedEntityCommentExists( noteUid ) && !StringUtils.isEmpty( note.getValue() ) ) { TrackedEntityComment comment = new TrackedEntityComment(); comment.setUid( noteUid ); comment.setCommentText( note.getValue() ); comment.setCreator( StringUtils.isEmpty( note.getStoredBy() ) ? User.getSafeUsername( storedBy ) : note.getStoredBy() ); Date created = DateUtils.parseDate( note.getStoredDate() ); comment.setCreated( created ); commentService.addTrackedEntityComment( comment ); programInstance.getComments().add( comment ); programInstanceService.updateProgramInstance( programInstance ); teiService.updateTrackedEntityInstance( programInstance.getEntityInstance() ); } } }
OrganisationUnit eventOrgUnit = programInstance != null ? programInstance.getOrganisationUnit() : programStageInstance.getOrganisationUnit();