@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;
}