<?php declare(strict_types=1);
namespace App\StartPlatz\Bundle\StartupBundle\Entity;
use DateTime;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use App\StartPlatz\Bundle\StartupBundle\Repository\ApplicationRepository;
use App\StartPlatz\Bundle\AllmedaBundle\Entity\BatchApplicationAssessment;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* Application
*
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=false)
*/
#[ORM\Table(name: 'sp_applications')]
#[ORM\UniqueConstraint(name: 'unique', columns: ['programSlug', 'batchSlug', 'startupId'])]
#[ORM\Entity(repositoryClass: ApplicationRepository::class)]
#[ORM\HasLifecycleCallbacks]
class Application
{
#[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private int|string|null $id = null;
#[ORM\Column(name: 'startupId', type: 'integer', nullable: true)]
private int|string|null $startupId = null;
#[ORM\Column(name: 'programId', type: 'integer', nullable: true)]
private int|string|null $programId = null;
#[ORM\Column(name: 'batchId', type: 'integer', nullable: true)]
private int|string|null $batchId = null;
#[ORM\Column(name: 'utm_source', type: 'string', length: 255, nullable: true)]
private ?string $utmSource = null;
#[ORM\Column(name: 'utm_medium', type: 'string', length: 255, nullable: true)]
private ?string $utmMedium = null;
#[ORM\Column(name: 'utm_campaign', type: 'string', length: 255, nullable: true)]
private ?string $utmCampaign = null;
#[ORM\Column(name: 'utm_term', type: 'string', length: 255, nullable: true)]
private ?string $utmTerm = null;
#[ORM\Column(name: 'utm_content', type: 'string', length: 255, nullable: true)]
private ?string $utmContent = null;
#[ORM\Column(name: 'votesRegistered', type: 'integer', nullable: true)]
private int|string|null $votesRegistered = null;
#[ORM\Column(name: 'programName', type: 'string', length: 255, nullable: true)]
private ?string $programName = null;
#[ORM\Column(name: 'programSlug', type: 'string', length: 255, nullable: true)]
private ?string $programSlug = null;
#[ORM\Column(name: 'batchName', type: 'string', length: 255, nullable: true)]
private ?string $batchName = null;
#[ORM\Column(name: 'batchSlug', type: 'string', length: 255, nullable: true)]
private ?string $batchSlug = null;
#[ORM\Column(name: 'template', type: 'string', length: 255, nullable: true)]
private ?string $template = null;
#[ORM\Column(name: 'teamId', type: 'integer', nullable: true)]
private int|string|null $teamId = null;
#[ORM\Column(name: 'memberId', type: 'integer', nullable: true)]
private int|string|null $memberId = null;
#[ORM\Column(name: 'lang', type: 'string', length: 4, nullable: true)]
private ?string $lang = null;
#[ORM\Column(name: 'startupName', type: 'string', length: 255, nullable: true)]
private ?string $startupName = null;
#[ORM\Column(name: 'visibility', type: 'string', length: 255, nullable: true)]
private ?string $visibility = null;
#[ORM\Column(name: 'firstName', type: 'string', length: 64, nullable: true)]
private ?string $firstName = null;
#[ORM\Column(name: 'lastName', type: 'string', length: 64, nullable: true)]
private ?string $lastName = null;
#[ORM\Column(name: 'person', type: 'string', length: 255, nullable: true)]
private ?string $person = null;
#[ORM\Column(name: 'email', type: 'string', length: 255, nullable: true)]
private ?string $email = null;
#[ORM\Column(name: 'secondaryEmail', type: 'string', length: 255, nullable: true)]
private ?string $secondaryEmail = null;
#[ORM\Column(name: 'phone', type: 'string', length: 64, nullable: true)]
private ?string $phone = null;
#[ORM\Column(name: 'linkedin', type: 'string', length: 255, nullable: true)]
private ?string $linkedin = null;
#[ORM\Column(name: 'telegram', type: 'string', length: 255, nullable: true)]
private ?string $telegram = null;
#[ORM\Column(name: 'discord', type: 'string', length: 255, nullable: true)]
private ?string $discord = null;
#[ORM\Column(name: 'wallet', type: 'string', length: 255, nullable: true)]
private ?string $wallet = null;
#[ORM\Column(name: 'priceinEuroCent', type: 'integer', nullable: true)]
private int|string|null $priceinEuroCent = null;
#[ORM\Column(name: 'realPriceinEuroCent', type: 'integer', nullable: true)]
private int|string|null $realPriceinEuroCent = null;
#[ORM\Column(name: 'discountPercent', type: 'integer', nullable: true)]
private int|string|null $discountPercent = null;
#[ORM\Column(name: 'discountReason', type: 'string', length: 255, nullable: true)]
private ?string $discountReason = null;
#[ORM\Column(name: 'teamSize', type: 'smallint', nullable: true)]
private int|string|null $teamSize = null;
#[ORM\Column(name: 'city', type: 'string', length: 64, nullable: true)]
private ?string $city = null;
#[ORM\Column(name: 'startupStage', type: 'string', length: 64, nullable: true)]
private ?string $startupStage = null;
#[ORM\Column(name: 'industry', type: 'string', length: 255, nullable: true)]
private ?string $industry = null;
// UP-111: Track field for Rheinland Pitch (e.g., "Impact", "PropTech", "FinTech")
#[ORM\Column(name: 'track', type: 'string', length: 64, nullable: true)]
private ?string $track = null;
#[ORM\Column(name: 'projectCategory', type: 'string', length: 255, nullable: true)]
private ?string $projectCategory = null;
#[ORM\Column(name: 'blockchain', type: 'string', length: 255, nullable: true)]
private ?string $blockchain = null;
#[ORM\Column(name: 'recommendedBy', type: 'string', length: 255, nullable: true)]
private ?string $recommendedBy = null;
#[ORM\Column(name: 'editStatus', type: 'string', length: 64, nullable: true)]
private ?string $editStatus = null;
#[ORM\Column(name: 'editMessage', type: 'string', length: 255, nullable: true)]
private ?string $editMessage = null;
#[ORM\Column(name: 'applicationStatus', type: 'string', length: 64, nullable: true)]
private ?string $applicationStatus = null;
#[ORM\Column(name: 'reviewStatus', type: 'string', length: 64, nullable: true)]
private ?string $reviewStatus = null;
#[ORM\Column(name: 'applicantType', type: 'string', length: 64, nullable: true)]
private ?string $applicantType = null;
#[ORM\Column(name: 'canReadList', type: 'boolean', nullable: true)]
private bool|int|null $canReadList = null;
#[ORM\Column(name: 'isSitting', type: 'boolean', nullable: true)]
private bool|int|null $isSitting = null;
#[ORM\Column(name: 'isNewMember', type: 'boolean', nullable: true)]
private bool|int|null $isNewMember = null;
#[ORM\Column(name: 'hasNewsletterPermissionGiven', type: 'boolean', nullable: true)]
private bool|int|null $hasNewsletterPermissionGiven = null;
#[ORM\Column(name: 'hasConfirmationMailSent', type: 'boolean', nullable: true)]
private bool|int|null $hasConfirmationMailSent = null;
#[ORM\Column(name: 'hasTermsAccepted', type: 'boolean', nullable: true)]
private bool|int|null $hasTermsAccepted = null;
#[ORM\Column(name: 'hasPaid', type: 'boolean', nullable: true)]
private bool|int|null $hasPaid = null;
#[ORM\Column(name: 'hasVolunteerAgreed', type: 'boolean', nullable: true)]
private bool|int|null $hasVolunteerAgreed = null;
#[ORM\Column(name: 'hasEmailValidated', type: 'boolean', nullable: true)]
private bool|int|null $hasEmailValidated = null;
#[ORM\Column(name: 'batchStatus', type: 'string', length: 64, nullable: true)]
private ?string $batchStatus = null;
// UP-002: New status dimensions for GS Admin Greenfield
#[ORM\Column(name: 'selectionStatus', type: 'string', length: 32, nullable: true)]
private ?string $selectionStatus = null;
#[ORM\Column(name: 'participationStatus', type: 'string', length: 32, nullable: true)]
private ?string $participationStatus = null;
#[ORM\Column(name: 'coachMemberId', type: 'integer', nullable: true)]
private ?int $coachMemberId = null;
#[ORM\Column(name: 'participationStartedAt', type: 'datetime', nullable: true)]
private ?\DateTime $participationStartedAt = null;
#[ORM\Column(name: 'participationCompletedAt', type: 'datetime', nullable: true)]
private ?\DateTime $participationCompletedAt = null;
#[ORM\Column(name: 'pitchPosition', type: 'string', length: 8, nullable: true)]
private ?string $pitchPosition = null;
#[ORM\Column(name: 'pitchImageLink', type: 'string', length: 255, nullable: true)]
private ?string $pitchImageLink = null;
#[ORM\Column(name: 'pitchVideoLink', type: 'string', length: 255, nullable: true)]
private ?string $pitchVideoLink = null;
#[ORM\Column(name: 'linkPitchDeck', type: 'string', length: 255, nullable: true)]
private ?string $linkPitchDeck = null;
#[ORM\Column(name: 'publicIdPitchDeck', type: 'string', length: 255, nullable: true)]
private ?string $publicIdPitchDeck = null;
#[ORM\Column(name: 'ideaPaperUrl', type: 'string', length: 255, nullable: true)]
private ?string $ideaPaperUrl = null;
#[ORM\Column(name: 'publicIdIdeaPaper', type: 'string', length: 255, nullable: true)]
private ?string $publicIdIdeaPaper = null;
#[ORM\Column(name: 'websiteUrl', type: 'string', length: 255, nullable: true)]
private ?string $websiteUrl = null;
#[ORM\Column(name: 'fulltime', type: 'string', length: 255, nullable: true)]
private ?string $fulltime = null;
#[ORM\Column(name: 'language', type: 'string', length: 16, nullable: true)]
private ?string $language = null;
#[ORM\Column(name: 'mvpStatus', type: 'string', length: 255, nullable: true)]
private ?string $mvpStatus = null;
#[ORM\Column(name: 'dealroomUrl', type: 'string', length: 255, nullable: true)]
private ?string $dealroomUrl = null;
#[ORM\Column(name: 'podioId', type: 'string', length: 8, nullable: true)]
private ?string $podioId = null;
#[ORM\Column(name: 'podioItemId', type: 'string', length: 8, nullable: true)]
private ?string $podioItemId = null;
#[ORM\Column(name: 'podioUrl', type: 'string', length: 255, nullable: true)]
private ?string $podioUrl = null;
#[ORM\Column(name: 'ideaPitch', type: 'text', nullable: true)]
#[Assert\Length(min: 10, max: 2000, minMessage: 'Your pitch must be at least {{ limit }} characters long', maxMessage: 'Your pitch cannot be longer than {{ limit }} characters')]
private ?string $ideaPitch = null;
#[ORM\Column(name: 'createdAt', type: 'datetime', nullable: true)]
private ?DateTime $createdAt = null;
#[ORM\Column(name: 'lastModified', type: 'datetime', nullable: true)]
private ?DateTime $lastModified = null;
#[ORM\Column(name: 'deletedAt', type: 'datetime', nullable: true)]
private ?DateTime $deletedAt = null;
#[ORM\Column(name: 'lastChangeUser', type: 'string', length: 255, nullable: true)]
private ?string $lastChangeUser = null;
#[ORM\Column(name: 'history', type: 'text', nullable: true)]
private ?string $history = null;
#[ORM\Column(name: 'extraFields', type: 'text', nullable: true)]
private ?string $extraFields = null;
#[ORM\Column(name: 'adminNotes', type: 'text', nullable: true)]
private ?string $adminNotes = null;
private $isExistingApplication;
#[ORM\OneToMany(targetEntity: BatchApplicationAssessment::class, mappedBy: 'application', cascade: ['persist', 'remove'])]
private Collection $assessments;
#[ORM\Column(name: 'ratingJudge1', type: 'smallint', nullable: true)]
private int|string|null $ratingJudge1 = null;
#[ORM\Column(name: 'ratingJudge2', type: 'smallint', nullable: true)]
private int|string|null $ratingJudge2 = null;
#[ORM\Column(name: 'ratingJudge3', type: 'smallint', nullable: true)]
private int|string|null $ratingJudge3 = null;
#[ORM\Column(name: 'ratingJudge4', type: 'smallint', nullable: true)]
private int|string|null $ratingJudge4 = null;
#[ORM\Column(name: 'ratingJudge5', type: 'smallint', nullable: true)]
private int|string|null $ratingJudge5 = null;
#[ORM\Column(name: 'ratingAverage', type: 'decimal', precision: 5, scale: 2, nullable: true)]
private ?float $ratingAverage = null;
#[ORM\Column(name: 'ratingUpdatedAt', type: 'datetime', nullable: true)]
private ?DateTime $ratingUpdatedAt = null;
#[ORM\Column(name: 'memberTagsAtRegistration', type: 'text', nullable: true)]
private ?string $memberTagsAtRegistration = null;
#[ORM\Column(name: 'wasCommunityMemberAtRegistration', type: 'boolean', nullable: true)]
private bool|int|null $wasCommunityMemberAtRegistration = null;
#[ORM\Column(name: 'wasPhysicalMemberAtRegistration', type: 'boolean', nullable: true)]
private bool|int|null $wasPhysicalMemberAtRegistration = null;
#[ORM\Column(name: 'memberUtmSourceAtRegistration', type: 'string', length: 255, nullable: true)]
private ?string $memberUtmSourceAtRegistration = null;
#[ORM\Column(name: 'kiKompetenzAtRegistration', type: 'string', length: 50, nullable: true)]
private ?string $kiKompetenzAtRegistration = null;
// ==================== ApplicationFlow Fields ====================
#[ORM\Column(name: 'pendingMemberData', type: 'json', nullable: true)]
private ?array $pendingMemberData = null;
#[ORM\Column(name: 'pendingTeamData', type: 'json', nullable: true)]
private ?array $pendingTeamData = null;
#[ORM\Column(name: 'resumeToken', type: 'string', length: 64, nullable: true)]
private ?string $resumeToken = null;
#[ORM\Column(name: 'resumeTokenExpiresAt', type: 'datetime', nullable: true)]
private ?DateTime $resumeTokenExpiresAt = null;
#[ORM\Column(name: 'isMemberCreated', type: 'boolean', options: ['default' => false])]
private bool $isMemberCreated = false;
#[ORM\Column(name: 'isTeamCreated', type: 'boolean', options: ['default' => false])]
private bool $isTeamCreated = false;
// setter and getter
/**
* @param int $id
*/
public function setId($id): void
{
$this->id = $id;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set batchSlug
*
* @param string $batchSlug
*
* @return Application
*/
public function setBatchSlug($batchSlug)
{
$this->batchSlug = $batchSlug !== null ? (string) $batchSlug : null;
return $this;
}
/**
* Get batchSlug
*
* @return string
*/
public function getBatchSlug()
{
return $this->batchSlug;
}
/**
* @return string
*/
public function getTemplate()
{
return $this->template;
}
/**
* @param string $template
*/
public function setTemplate($template): void
{
$this->template = $template !== null ? (string) $template : null;
}
/**
* @return string
*/
public function getStartupName()
{
return $this->startupName;
}
/**
* @param string $startupName
*/
public function setStartupName($startupName): void
{
$this->startupName = $startupName !== null ? (string) $startupName : null;
}
/**
* @return string
*/
public function getVisibility()
{
return $this->visibility;
}
/**
* @param string $visibility
*/
public function setVisibility($visibility): void
{
$this->visibility = $visibility !== null ? (string) $visibility : null;
}
/**
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @param string $firstName
*/
public function setFirstName($firstName): void
{
$this->firstName = $firstName !== null ? (string) $firstName : null;
}
/**
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* @param string $lastName
*/
public function setLastName($lastName): void
{
$this->lastName = $lastName !== null ? (string) $lastName : null;
}
/**
* Set createdAt
*
* @param DateTime $createdAt
*
* @return Application
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* Set applicationStatus
*
* @param string $applicationStatus
*
* @return Application
*/
public function setApplicationStatus($applicationStatus)
{
$this->applicationStatus = $applicationStatus !== null ? (string) $applicationStatus : null;
return $this;
}
/**
* Get applicationStatus
*
* @return string
*/
public function getApplicationStatus()
{
return $this->applicationStatus;
}
/**
* Set reviewStatus
*
* @param string $reviewStatus
*
* @return Application
*/
public function setReviewStatus($reviewStatus)
{
$this->reviewStatus = $reviewStatus !== null ? (string) $reviewStatus : null;
return $this;
}
/**
* Get reviewStatus
*
* @return string
*/
public function getReviewStatus()
{
return $this->reviewStatus;
}
/**
* @return string
*/
public function getApplicantType()
{
return $this->applicantType;
}
/**
* @param string $applicantType
*/
public function setApplicantType($applicantType): void
{
$this->applicantType = $applicantType !== null ? (string) $applicantType : null;
}
/**
* @return bool
*/
public function getCanReadList()
{
return $this->canReadList;
}
/**
* @param bool $canReadList
*/
public function setCanReadList(bool|int|null $canReadList)
{
$this->canReadList = $canReadList !== null ? (bool) $canReadList : null;
}
/**
* @return bool
*/
public function getIsSitting()
{
return $this->isSitting;
}
/**
* @return bool
*/
public function isSitting()
{
return $this->isSitting;
}
/**
* @param bool $isSitting
*/
public function setIsSitting($isSitting): void
{
$this->isSitting = $isSitting !== null ? (bool) $isSitting : null;
}
public function getIsNewMember()
{
return $this->isNewMember;
}
public function isNewMember()
{
return $this->isNewMember;
}
public function setIsNewMember($isNewMember): void
{
$this->isNewMember = $isNewMember !== null ? (bool) $isNewMember : null;
}
/**
* @return bool
*/
public function getHasNewsletterPermissionGiven()
{
return $this->hasNewsletterPermissionGiven;
}
/**
* @return bool
*/
public function isHasNewsletterPermissionGiven()
{
return $this->hasNewsletterPermissionGiven;
}
/**
* @param bool $hasNewsletterPermissionGiven
*/
public function setHasNewsletterPermissionGiven($hasNewsletterPermissionGiven): void
{
$this->hasNewsletterPermissionGiven = $hasNewsletterPermissionGiven !== null ? (bool) $hasNewsletterPermissionGiven : null;
}
public function getHasConfirmationMailSent()
{
return $this->hasConfirmationMailSent;
}
public function isHasConfirmationMailSent()
{
return $this->hasConfirmationMailSent;
}
public function setHasConfirmationMailSent($hasConfirmationMailSent): void
{
$this->hasConfirmationMailSent = $hasConfirmationMailSent !== null ? (bool) $hasConfirmationMailSent : null;
}
/**
* @return bool
*/
public function getHasTermsAccepted()
{
return $this->hasTermsAccepted;
}
/**
* @return bool
*/
public function isHasTermsAccepted()
{
return $this->hasTermsAccepted;
}
/**
* @param bool $hasTermsAccepted
*/
public function setHasTermsAccepted($hasTermsAccepted): void
{
$this->hasTermsAccepted = $hasTermsAccepted !== null ? (bool) $hasTermsAccepted : null;
}
/**
* @return bool
*/
public function getHasPaid()
{
return $this->hasPaid;
}
/**
* @return bool
*/
public function isHasPaid()
{
return $this->hasPaid;
}
/**
* @param bool $hasPaid
*/
public function setHasPaid($hasPaid): void
{
$this->hasPaid = $hasPaid !== null ? (bool) $hasPaid : null;
}
/**
* @return bool
*/
public function isHasVolunteerAgreed()
{
return $this->hasVolunteerAgreed;
}
/**
* @return bool
*/
public function getHasVolunteerAgreed()
{
return $this->hasVolunteerAgreed;
}
/**
* @param bool $hasVolunteerAgreed
*/
public function setHasVolunteerAgreed($hasVolunteerAgreed): void
{
$this->hasVolunteerAgreed = $hasVolunteerAgreed !== null ? (bool) $hasVolunteerAgreed : null;
}
/**
* @return bool
*/
public function isHasEmailValidated()
{
return $this->hasEmailValidated;
}
/**
* @return bool
*/
public function getHasEmailValidated()
{
return $this->hasEmailValidated;
}
/**
* @param bool $hasEmailValidated
*/
public function setHasEmailValidated($hasEmailValidated): void
{
$this->hasEmailValidated = $hasEmailValidated !== null ? (bool) $hasEmailValidated : null;
}
/**
* Set ideaPitch
*
* @param string $ideaPitch
*
* @return Application
*/
public function setIdeaPitch($ideaPitch)
{
$this->ideaPitch = $ideaPitch !== null ? (string) $ideaPitch : null;
return $this;
}
/**
* Get ideaPitch
*
* @return string
*/
public function getIdeaPitch()
{
return $this->ideaPitch;
}
/**
* Set person
*
* @param string $person
*
* @return Application
*/
public function setPerson($person)
{
$this->person = $person !== null ? (string) $person : null;
return $this;
}
/**
* Get person
*
* @return string
*/
public function getPerson()
{
return $this->person;
}
/**
* Set email
*
* @param string $email
*
* @return Application
*/
public function setEmail($email)
{
$this->email = $email !== null ? strtolower($email) : null;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return strtolower($this->email ?? '');
}
/**
* @return string
*/
public function getSecondaryEmail()
{
return $this->secondaryEmail;
}
/**
* @param string $secondaryEmail
*/
public function setSecondaryEmail($secondaryEmail): void
{
$this->secondaryEmail = $secondaryEmail !== null ? (string) $secondaryEmail : null;
}
/**
* Set phone
*
* @param string $phone
*
* @return Application
*/
public function setPhone($phone)
{
$this->phone = $phone !== null ? (string) $phone : null;
return $this;
}
/**
* @return string
*/
public function getLinkedin()
{
return $this->linkedin;
}
/**
* @param string $linkedin
*/
public function setLinkedin($linkedin): void
{
$this->linkedin = $this->adjustExternalUrlToHttps($linkedin);
}
/**
* @return string
*/
public function getTelegram()
{
return $this->telegram;
}
/**
* @param string $telegram
*/
public function setTelegram($telegram): void
{
$this->telegram = $telegram !== null ? (string) $telegram : null;
}
/**
* @return string
*/
public function getDiscord()
{
return $this->discord;
}
/**
* @param string $discord
*/
public function setDiscord($discord): void
{
$this->discord = $discord !== null ? (string) $discord : null;
}
/**
* @return string
*/
public function getWallet()
{
return $this->wallet;
}
/**
* @param string $wallet
*/
public function setWallet($wallet): void
{
$this->wallet = $wallet !== null ? (string) $wallet : null;
}
/**
* @return int
*/
public function getPriceinEuroCent()
{
return $this->priceinEuroCent;
}
/**
* @param int $priceinEuroCent
*/
public function setPriceinEuroCent($priceinEuroCent): void
{
$this->priceinEuroCent = $priceinEuroCent !== null ? (string) $priceinEuroCent : null;
}
/**
* @return int
*/
public function getRealPriceinEuroCent()
{
return $this->realPriceinEuroCent;
}
/**
* @param int $realPriceinEuroCent
*/
public function setRealPriceinEuroCent($realPriceinEuroCent): void
{
$this->realPriceinEuroCent = $realPriceinEuroCent !== null ? (string) $realPriceinEuroCent : null;
}
/**
* @return int
*/
public function getDiscountPercent()
{
return $this->discountPercent;
}
/**
* @param int $discountPercent
*/
public function setDiscountPercent($discountPercent): void
{
$this->discountPercent = $discountPercent !== null ? (string) $discountPercent : null;
}
/**
* @return string
*/
public function getDiscountReason()
{
return $this->discountReason;
}
/**
* @param string $discountReason
*/
public function setDiscountReason($discountReason): void
{
$this->discountReason = $discountReason !== null ? (string) $discountReason : null;
}
/**
* Get phone
*
* @return string
*/
public function getPhone()
{
return $this->phone;
}
/**
* @return int
*/
public function getStartupId()
{
return $this->startupId;
}
/**
* @param int $startupId
*/
public function setStartupId($startupId): void
{
$this->startupId = $startupId !== null ? (string) $startupId : null;
}
/**
* @return int
*/
public function getProgramId()
{
return $this->programId;
}
/**
* @param int $programId
*/
public function setProgramId($programId): void
{
$this->programId = $programId !== null ? (string) $programId : null;
}
/**
* @return int
*/
public function getBatchId()
{
return $this->batchId;
}
/**
* @param int $batchId
*/
public function setBatchId($batchId): void
{
$this->batchId = $batchId !== null ? (string) $batchId : null;
}
/**
* @return string|null
*/
public function getUtmSource()
{
return $this->utmSource;
}
/**
* @param string|null $utmSource
*/
public function setUtmSource($utmSource): void
{
$this->utmSource = $utmSource !== null ? (string) $utmSource : null;
}
/**
* @return string|null
*/
public function getUtmMedium()
{
return $this->utmMedium;
}
/**
* @param string|null $utmMedium
*/
public function setUtmMedium($utmMedium): void
{
$this->utmMedium = $utmMedium !== null ? (string) $utmMedium : null;
}
/**
* @return string|null
*/
public function getUtmCampaign()
{
return $this->utmCampaign;
}
/**
* @param string|null $utmCampaign
*/
public function setUtmCampaign($utmCampaign): void
{
$this->utmCampaign = $utmCampaign !== null ? (string) $utmCampaign : null;
}
/**
* @return string|null
*/
public function getUtmTerm()
{
return $this->utmTerm;
}
/**
* @param string|null $utmTerm
*/
public function setUtmTerm($utmTerm): void
{
$this->utmTerm = $utmTerm !== null ? (string) $utmTerm : null;
}
/**
* @return string|null
*/
public function getUtmContent()
{
return $this->utmContent;
}
/**
* @param string|null $utmContent
*/
public function setUtmContent($utmContent): void
{
$this->utmContent = $utmContent !== null ? (string) $utmContent : null;
}
/**
* @return int
*/
public function getVotesRegistered()
{
return $this->votesRegistered;
}
/**
* @param int $votesRegistered
*/
public function setVotesRegistered($votesRegistered): void
{
$this->votesRegistered = $votesRegistered !== null ? (string) $votesRegistered : null;
}
/**
* Set programName
*
* @param string $programName
*
* @return Application
*/
public function setProgramName($programName)
{
$this->programName = $programName !== null ? (string) $programName : null;
return $this;
}
/**
* Get programName
*
* @return string
*/
public function getProgramName()
{
return $this->programName;
}
/**
* Set programSlug
*
* @param string $programSlug
*
* @return Application
*/
public function setProgramSlug($programSlug)
{
$this->programSlug = $programSlug !== null ? (string) $programSlug : null;
return $this;
}
/**
* Get programSlug
*
* @return string
*/
public function getProgramSlug()
{
return $this->programSlug;
}
/**
* Set batchName
*
* @param string $batchName
*
* @return Application
*/
public function setBatchName($batchName)
{
$this->batchName = $batchName !== null ? (string) $batchName : null;
return $this;
}
/**
* Get batchName
*
* @return string
*/
public function getBatchName()
{
return $this->batchName;
}
/**
* Set teamId
*
* @param integer $teamId
*
* @return Application
*/
public function setTeamId($teamId)
{
$this->teamId = $teamId !== null ? (string) $teamId : null;
return $this;
}
/**
* Get teamId
*
* @return integer
*/
public function getTeamId()
{
return $this->teamId;
}
/**
* @return int
*/
public function getMemberId()
{
return $this->memberId;
}
/**
* @param int $memberId
*/
public function setMemberId($memberId): void
{
$this->memberId = $memberId !== null ? (string) $memberId : null;
}
/**
* @return string
*/
public function getLang()
{
return $this->lang;
}
/**
* @param string $lang
*/
public function setLang($lang): void
{
$this->lang = $lang !== null ? (string) $lang : null;
}
/**
* @return int
*/
public function getTeamSize()
{
return $this->teamSize;
}
/**
* @param int $teamSize
*/
public function setTeamSize($teamSize): void
{
$this->teamSize = $teamSize !== null ? (string) $teamSize : null;
}
/**
* @return string
*/
public function getCity()
{
return $this->city;
}
/**
* @param string $city
*/
public function setCity($city): void
{
$this->city = $city !== null ? (string) $city : null;
}
/**
* Set startupStage
*
* @param string $startupStage
*
* @return Application
*/
public function setStartupStage($startupStage)
{
$this->startupStage = $startupStage !== null ? (string) $startupStage : null;
return $this;
}
/**
* @return string
*/
public function getIndustry()
{
return $this->industry;
}
/**
* @param string $industry
*/
public function setIndustry($industry): void
{
$this->industry = $industry !== null ? (string) $industry : null;
}
// UP-111: Track getter/setter for Rheinland Pitch
public function getTrack(): ?string
{
return $this->track;
}
public function setTrack(?string $track): self
{
$this->track = $track;
return $this;
}
/**
* @return string
*/
public function getProjectCategory()
{
return $this->projectCategory;
}
/**
* @param string $projectCategory
*/
public function setProjectCategory($projectCategory): void
{
$this->projectCategory = $projectCategory !== null ? (string) $projectCategory : null;
}
/**
* @return string
*/
public function getBlockchain()
{
return $this->blockchain;
}
/**
* @param string $blockchain
*/
public function setBlockchain($blockchain): void
{
$this->blockchain = $blockchain !== null ? (string) $blockchain : null;
}
/**
* @return string
*/
public function getRecommendedBy()
{
return $this->recommendedBy;
}
/**
* @param string $recommendedBy
*/
public function setRecommendedBy($recommendedBy): void
{
$this->recommendedBy = $recommendedBy !== null ? (string) $recommendedBy : null;
}
/**
* Get startupStage
*
* @return string
*/
public function getStartupStage()
{
return $this->startupStage;
}
/**
* @return string
*/
public function getEditStatus()
{
return $this->editStatus;
}
/**
* @param string $editStatus
*/
public function setEditStatus($editStatus): void
{
$this->editStatus = $editStatus !== null ? (string) $editStatus : null;
}
/**
* @return string
*/
public function getEditMessage()
{
return $this->editMessage;
}
/**
* @param string $editMessage
*/
public function setEditMessage($editMessage): void
{
$this->editMessage = $editMessage !== null ? (string) $editMessage : null;
}
/**
* Set batchStatus
*
* @param string $batchStatus
*
* @return Application
*/
public function setBatchStatus($batchStatus)
{
$this->batchStatus = $batchStatus !== null ? (string) $batchStatus : null;
return $this;
}
/**
* Get batchStatus
*
* @return string
*/
public function getBatchStatus()
{
return $this->batchStatus;
}
// ==================== UP-002: New Status Fields ====================
public function getSelectionStatus(): ?string
{
return $this->selectionStatus;
}
public function setSelectionStatus($selectionStatus): self
{
$this->selectionStatus = $selectionStatus !== null ? (string) $selectionStatus : null;
return $this;
}
public function getParticipationStatus(): ?string
{
return $this->participationStatus;
}
public function setParticipationStatus($participationStatus): self
{
$this->participationStatus = $participationStatus !== null ? (string) $participationStatus : null;
return $this;
}
public function getCoachMemberId(): ?int
{
return $this->coachMemberId;
}
public function setCoachMemberId(?int $coachMemberId): self
{
$this->coachMemberId = $coachMemberId;
return $this;
}
public function getParticipationStartedAt(): ?\DateTime
{
return $this->participationStartedAt;
}
public function setParticipationStartedAt(?\DateTime $participationStartedAt): self
{
$this->participationStartedAt = $participationStartedAt;
return $this;
}
public function getParticipationCompletedAt(): ?\DateTime
{
return $this->participationCompletedAt;
}
public function setParticipationCompletedAt(?\DateTime $participationCompletedAt): self
{
$this->participationCompletedAt = $participationCompletedAt;
return $this;
}
/**
* @return string
*/
public function getPitchPosition()
{
return $this->pitchPosition;
}
/**
* @param string $pitchPosition
*/
public function setPitchPosition($pitchPosition): void
{
$this->pitchPosition = $pitchPosition !== null ? (string) $pitchPosition : null;
}
/**
* @return string
*/
public function getPitchImageLink()
{
return $this->pitchImageLink;
}
/**
* @param string $pitchImageLink
*/
public function setPitchImageLink($pitchImageLink): void
{
$this->pitchImageLink = $pitchImageLink !== null ? (string) $pitchImageLink : null;
}
/**
* @return string
*/
public function getPitchVideoLink()
{
return $this->pitchVideoLink;
}
/**
* @param string $pitchVideoLink
*/
public function setPitchVideoLink($pitchVideoLink): void
{
$this->pitchVideoLink = $pitchVideoLink !== null ? (string) $pitchVideoLink : null;
}
/**
* Set linkPitchDeck
*
* @param string $linkPitchDeck
*
* @return Application
*/
public function setLinkPitchDeck($linkPitchDeck)
{
$this->linkPitchDeck = $linkPitchDeck !== null ? (string) $linkPitchDeck : null;
return $this;
}
/**
* Get linkPitchDeck
*
* @return string
*/
public function getLinkPitchDeck()
{
return $this->linkPitchDeck;
}
/**
* @return string
*/
public function getPublicIdPitchDeck()
{
return $this->publicIdPitchDeck;
}
/**
* @param string $publicIdPitchDeck
*/
public function setPublicIdPitchDeck($publicIdPitchDeck): void
{
$this->publicIdPitchDeck = $publicIdPitchDeck !== null ? (string) $publicIdPitchDeck : null;
}
/**
* @return string|null
*/
public function getIdeaPaperUrl(): ?string
{
return $this->ideaPaperUrl;
}
/**
* @param string|null $ideaPaperUrl
*/
public function setIdeaPaperUrl($ideaPaperUrl): void
{
$this->ideaPaperUrl = $ideaPaperUrl !== null ? (string) $ideaPaperUrl : null;
}
/**
* @return string|null
*/
public function getPublicIdIdeaPaper(): ?string
{
return $this->publicIdIdeaPaper;
}
/**
* @param string|null $publicIdIdeaPaper
*/
public function setPublicIdIdeaPaper(?string $publicIdIdeaPaper): void
{
$this->publicIdIdeaPaper = $publicIdIdeaPaper !== null ? (string) $publicIdIdeaPaper : null;
}
/**
* @return string
*/
public function getWebsiteUrl()
{
return $this->websiteUrl;
}
/**
* @param string $websiteUrl
*/
public function setWebsiteUrl($websiteUrl): void
{
$this->websiteUrl = $websiteUrl !== null ? (string) $websiteUrl : null;
}
/**
* @return string
*/
public function getFulltime()
{
return $this->fulltime;
}
/**
* @param string $fulltime
*/
public function setFulltime($fulltime): void
{
$this->fulltime = $fulltime !== null ? (string) $fulltime : null;
}
/**
* @return string
*/
public function getLanguage()
{
return $this->language;
}
/**
* @param string $language
*/
public function setLanguage($language): void
{
$this->language = $language !== null ? (string) $language : null;
}
/**
* @return string
*/
public function getMvpStatus()
{
return $this->mvpStatus;
}
/**
* @param string $mvpStatus
*/
public function setMvpStatus($mvpStatus): void
{
$this->mvpStatus = $mvpStatus !== null ? (string) $mvpStatus : null;
}
/**
* @return string
*/
public function getDealroomUrl()
{
return $this->dealroomUrl;
}
/**
* @param string $dealroomUrl
*/
public function setDealroomUrl($dealroomUrl): void
{
$this->dealroomUrl = $dealroomUrl !== null ? (string) $dealroomUrl : null;
}
/**
* @return string
*/
public function getPodioId()
{
return $this->podioId;
}
/**
* @param string $podioId
*/
public function setPodioId($podioId): void
{
$this->podioId = $podioId !== null ? (string) $podioId : null;
}
/**
* @return string
*/
public function getPodioItemId()
{
return $this->podioItemId;
}
/**
* @param string $podioItemId
*/
public function setPodioItemId($podioItemId): void
{
$this->podioItemId = $podioItemId !== null ? (string) $podioItemId : null;
}
/**
* @return string
*/
public function getPodioUrl()
{
return $this->podioUrl;
}
/**
* @param string $podioUrl
*/
public function setPodioUrl($podioUrl): void
{
$this->podioUrl = $podioUrl !== null ? (string) $podioUrl : null;
}
/**
* Set lastModified
*
* @param DateTime $lastModified
*
* @return Application
*/
public function setLastModified($lastModified)
{
$this->lastModified = $lastModified;
return $this;
}
/**
* Get lastModified
*
* @return DateTime
*/
public function getLastModified()
{
return $this->lastModified;
}
/**
* Set lastChangeUser
*
* @param string $lastChangeUser
*
* @return Application
*/
public function setLastChangeUser($lastChangeUser)
{
$this->lastChangeUser = $lastChangeUser !== null ? (string) $lastChangeUser : null;
return $this;
}
/**
* Get lastChangeUser
*
* @return string
*/
public function getLastChangeUser()
{
return $this->lastChangeUser;
}
/**
* @return string
*/
public function getHistory()
{
return $this->history;
}
/**
* @param string $history
*/
public function setHistory($history): void
{
$this->history = $history !== null ? (string) $history : null;
}
/**
* @return string
*/
public function getExtraFields()
{
return $this->extraFields;
}
/**
* @param string $extraFields
*/
public function setExtraFields($extraFields): void
{
$this->extraFields = $extraFields !== null ? (string) $extraFields : null;
}
/**
* @return string
*/
public function getAdminNotes()
{
return $this->adminNotes;
}
/**
* @param string $adminNotes
*/
public function setAdminNotes($adminNotes): void
{
$this->adminNotes = $adminNotes !== null ? (string) $adminNotes : null;
}
/**
* @return bool
*/
public function getIsExistingApplication()
{
return $this->isExistingApplication;
}
/**
* @return bool
*/
public function isExistingApplication()
{
return $this->isExistingApplication;
}
/**
* @param bool $isExistingApplication
*/
public function setIsExistingApplication($isExistingApplication): void
{
$this->isExistingApplication = $isExistingApplication;
}
/**
* @return array
*/
public function getAssessments()
{
return $this->assessments;
}
#[ORM\PrePersist]
public function onAdd(): void
{
$this->setCreatedAt(new DateTime('now'));
$this->setVotesRegistered(0);
}
#[ORM\PrePersist]
#[ORM\PreUpdate]
public function onUpdate(): void
{
$this->setLastModified(new DateTime('now'));
}
private function adjustExternalUrlToHttps($url)
{
$url = trim((string) $url);
if($url == '') {
return $url;
} elseif(str_starts_with($url, 'https://')) {
return $url;
} elseif(str_starts_with($url, 'http://')) {
return str_replace('http', 'https', $url);
} elseif(strpos($url, '://') and $arr = explode('://', $url) and count($arr) == 2) {
return 'https://'.$arr[1];
} else {
return 'https://'.$url;
}
}
/**
* Get ratingJudge1
*
* @return integer|null
*/
public function getRatingJudge1()
{
return $this->ratingJudge1;
}
/**
* Set ratingJudge1
*
* @param integer|null $ratingJudge1
* @return Application
*/
public function setRatingJudge1($ratingJudge1)
{
$this->ratingJudge1 = $ratingJudge1 !== null ? (string) $ratingJudge1 : null;
return $this;
}
/**
* Get ratingJudge2
*
* @return integer|null
*/
public function getRatingJudge2()
{
return $this->ratingJudge2;
}
/**
* Set ratingJudge2
*
* @param integer|null $ratingJudge2
* @return Application
*/
public function setRatingJudge2($ratingJudge2)
{
$this->ratingJudge2 = $ratingJudge2 !== null ? (string) $ratingJudge2 : null;
return $this;
}
/**
* Get ratingJudge3
*
* @return integer|null
*/
public function getRatingJudge3()
{
return $this->ratingJudge3;
}
/**
* Set ratingJudge3
*
* @param integer|null $ratingJudge3
* @return Application
*/
public function setRatingJudge3($ratingJudge3)
{
$this->ratingJudge3 = $ratingJudge3 !== null ? (string) $ratingJudge3 : null;
return $this;
}
/**
* Get ratingJudge4
*
* @return integer|null
*/
public function getRatingJudge4()
{
return $this->ratingJudge4;
}
/**
* Set ratingJudge4
*
* @param integer|null $ratingJudge4
* @return Application
*/
public function setRatingJudge4($ratingJudge4)
{
$this->ratingJudge4 = $ratingJudge4 !== null ? (string) $ratingJudge4 : null;
return $this;
}
/**
* Get ratingJudge5
*
* @return integer|null
*/
public function getRatingJudge5()
{
return $this->ratingJudge5;
}
/**
* Set ratingJudge5
*
* @param integer|null $ratingJudge5
* @return Application
*/
public function setRatingJudge5($ratingJudge5)
{
$this->ratingJudge5 = $ratingJudge5 !== null ? (string) $ratingJudge5 : null;
return $this;
}
/**
* Get ratingAverage
*
* @return float|null
*/
public function getRatingAverage()
{
return $this->ratingAverage;
}
/**
* Set ratingAverage
*
* @param float|null $ratingAverage
* @return Application
*/
public function setRatingAverage($ratingAverage)
{
$this->ratingAverage = $ratingAverage !== null && $ratingAverage !== '' ? (float) $ratingAverage : null;
return $this;
}
/**
* Get ratingUpdatedAt
*
* @return \DateTime|null
*/
public function getRatingUpdatedAt()
{
return $this->ratingUpdatedAt;
}
/**
* Set ratingUpdatedAt
*
* @param \DateTime|null $ratingUpdatedAt
* @return Application
*/
public function setRatingUpdatedAt($ratingUpdatedAt)
{
$this->ratingUpdatedAt = $ratingUpdatedAt;
return $this;
}
/**
* Calculate and update the average rating based on all judge ratings
*
* @return float|null
*/
public function calculateAverageRating()
{
$ratings = array_filter([
$this->ratingJudge1,
$this->ratingJudge2,
$this->ratingJudge3,
$this->ratingJudge4,
$this->ratingJudge5
], function($rating) {
return $rating !== null && $rating > 0;
});
if (count($ratings) === 0) {
$this->ratingAverage = null;
return null;
}
$average = round(array_sum($ratings) / count($ratings), 2);
$this->ratingAverage = $average;
return $average;
}
/**
* Get all ratings as an array
*
* @return array
*/
public function getRatingsArray()
{
return [
'judge1' => $this->ratingJudge1,
'judge2' => $this->ratingJudge2,
'judge3' => $this->ratingJudge3,
'judge4' => $this->ratingJudge4,
'judge5' => $this->ratingJudge5,
'average' => $this->ratingAverage
];
}
/**
* Get memberTagsAtRegistration
*
* @return string|null
*/
public function getMemberTagsAtRegistration(): ?string
{
return $this->memberTagsAtRegistration;
}
/**
* Set memberTagsAtRegistration
*
* @param string|null $memberTagsAtRegistration
* @return Application
*/
public function setMemberTagsAtRegistration($memberTagsAtRegistration): Application
{
$this->memberTagsAtRegistration = $memberTagsAtRegistration !== null ? (string) $memberTagsAtRegistration : null;
return $this;
}
/**
* Get wasCommunityMemberAtRegistration
*
* @return bool|null
*/
public function getWasCommunityMemberAtRegistration(): bool|int|null
{
return $this->wasCommunityMemberAtRegistration;
}
/**
* Set wasCommunityMemberAtRegistration
*
* @param bool|null $wasCommunityMemberAtRegistration
* @return Application
*/
public function setWasCommunityMemberAtRegistration(bool|int|null $wasCommunityMemberAtRegistration): Application
{
$this->wasCommunityMemberAtRegistration = $wasCommunityMemberAtRegistration !== null ? (bool) $wasCommunityMemberAtRegistration : null;
return $this;
}
/**
* Get wasPhysicalMemberAtRegistration
*
* @return bool|null
*/
public function getWasPhysicalMemberAtRegistration(): bool|int|null
{
return $this->wasPhysicalMemberAtRegistration;
}
/**
* Set wasPhysicalMemberAtRegistration
*
* @param bool|null $wasPhysicalMemberAtRegistration
* @return Application
*/
public function setWasPhysicalMemberAtRegistration(bool|int|null $wasPhysicalMemberAtRegistration): Application
{
$this->wasPhysicalMemberAtRegistration = $wasPhysicalMemberAtRegistration !== null ? (bool) $wasPhysicalMemberAtRegistration : null;
return $this;
}
/**
* Get memberUtmSourceAtRegistration
*
* @return string|null
*/
public function getMemberUtmSourceAtRegistration(): ?string
{
return $this->memberUtmSourceAtRegistration;
}
/**
* Set memberUtmSourceAtRegistration
*
* @param string|null $memberUtmSourceAtRegistration
* @return Application
*/
public function setMemberUtmSourceAtRegistration($memberUtmSourceAtRegistration): Application
{
$this->memberUtmSourceAtRegistration = $memberUtmSourceAtRegistration !== null ? (string) $memberUtmSourceAtRegistration : null;
return $this;
}
/**
* Get kiKompetenzAtRegistration
*
* @return string|null
*/
public function getKiKompetenzAtRegistration(): ?string
{
return $this->kiKompetenzAtRegistration;
}
/**
* Set kiKompetenzAtRegistration
*
* @param string|null $kiKompetenzAtRegistration
* @return Application
*/
public function setKiKompetenzAtRegistration($kiKompetenzAtRegistration): Application
{
$this->kiKompetenzAtRegistration = $kiKompetenzAtRegistration !== null ? (string) $kiKompetenzAtRegistration : null;
return $this;
}
// ==================== ApplicationFlow Getters/Setters ====================
public function getPendingMemberData(): ?array
{
return $this->pendingMemberData;
}
public function setPendingMemberData(?array $pendingMemberData): self
{
$this->pendingMemberData = $pendingMemberData;
return $this;
}
public function getPendingTeamData(): ?array
{
return $this->pendingTeamData;
}
public function setPendingTeamData(?array $pendingTeamData): self
{
$this->pendingTeamData = $pendingTeamData;
return $this;
}
public function getResumeToken(): ?string
{
return $this->resumeToken;
}
public function setResumeToken($resumeToken): self
{
$this->resumeToken = $resumeToken !== null ? (string) $resumeToken : null;
return $this;
}
public function getResumeTokenExpiresAt(): ?\DateTime
{
return $this->resumeTokenExpiresAt;
}
public function setResumeTokenExpiresAt(?\DateTime $resumeTokenExpiresAt): self
{
$this->resumeTokenExpiresAt = $resumeTokenExpiresAt;
return $this;
}
public function isResumeTokenExpired(): bool
{
if ($this->resumeTokenExpiresAt === null) {
return true;
}
return $this->resumeTokenExpiresAt < new \DateTime();
}
public function getIsMemberCreated(): bool
{
return $this->isMemberCreated;
}
public function isMemberCreated(): bool
{
return $this->isMemberCreated;
}
public function setIsMemberCreated(bool|int|null $isMemberCreated): self
{
$this->isMemberCreated = $isMemberCreated;
return $this;
}
public function getIsTeamCreated(): bool
{
return $this->isTeamCreated;
}
public function isTeamCreated(): bool
{
return $this->isTeamCreated;
}
public function setIsTeamCreated(bool|int|null $isTeamCreated): self
{
$this->isTeamCreated = $isTeamCreated;
return $this;
}
/**
* Check if this application has pending data that needs finalization
*/
public function hasPendingData(): bool
{
return $this->pendingMemberData !== null || $this->pendingTeamData !== null;
}
/**
* Check if this application is finalized (member and/or team created)
*/
public function isFinalized(): bool
{
// Finalized means either:
// 1. New flow: isMemberCreated flag is set
// 2. Legacy: memberId is already set (from old flow)
return $this->isMemberCreated || $this->memberId !== null;
}
// ========== SOFT DELETE ==========
public function getDeletedAt(): ?DateTime
{
return $this->deletedAt;
}
public function setDeletedAt(?DateTime $deletedAt): self
{
$this->deletedAt = $deletedAt;
return $this;
}
public function isDeleted(): bool
{
return $this->deletedAt !== null;
}
}