fixes for 1.15 (#2704)
This commit is contained in:
@@ -94,16 +94,17 @@ class CustomerFixtures extends Fixture
|
||||
{
|
||||
$entry = new Customer();
|
||||
$entry
|
||||
->setCurrency($faker->currencyCode)
|
||||
->setName($faker->company)
|
||||
->setAddress($faker->address)
|
||||
->setComment($faker->text)
|
||||
->setNumber('C-' . $faker->ean8)
|
||||
->setCountry($faker->countryCode)
|
||||
->setTimezone($faker->timezone)
|
||||
->setCurrency($faker->currencyCode())
|
||||
->setName($faker->company())
|
||||
->setAddress($faker->address())
|
||||
->setEmail($faker->safeEmail())
|
||||
->setComment($faker->text())
|
||||
->setNumber('C-' . $faker->ean8())
|
||||
->setCountry($faker->countryCode())
|
||||
->setTimezone($faker->timezone())
|
||||
->setVisible($visible)
|
||||
->setVatId($faker->vat)
|
||||
;
|
||||
$entry->setVatId($faker->creditCardNumber());
|
||||
|
||||
if (rand(0, 3) % 3) {
|
||||
$entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET));
|
||||
@@ -126,11 +127,14 @@ class CustomerFixtures extends Fixture
|
||||
{
|
||||
$entry = new Project();
|
||||
|
||||
/** @var string $name */
|
||||
$name = $faker->words(2, true);
|
||||
|
||||
$entry
|
||||
->setName($faker->catchPhrase)
|
||||
->setComment($faker->text)
|
||||
->setName(ucfirst($name))
|
||||
->setComment($faker->text())
|
||||
->setCustomer($customer)
|
||||
->setOrderNumber('P-' . $faker->ean8)
|
||||
->setOrderNumber('P-' . $faker->ean8())
|
||||
->setVisible($visible)
|
||||
;
|
||||
|
||||
@@ -153,11 +157,14 @@ class CustomerFixtures extends Fixture
|
||||
*/
|
||||
private function createActivity(Generator $faker, ?Project $project, $visible)
|
||||
{
|
||||
/** @var string $name */
|
||||
$name = $faker->words(2, true);
|
||||
|
||||
$entry = new Activity();
|
||||
$entry
|
||||
->setName($faker->bs)
|
||||
->setName(ucfirst($name))
|
||||
->setProject($project)
|
||||
->setComment($faker->text)
|
||||
->setComment($faker->text())
|
||||
->setVisible($visible)
|
||||
;
|
||||
|
||||
|
||||
@@ -47,11 +47,11 @@ class InvoiceFixtures extends Fixture
|
||||
->setVat($invoiceConfig[6])
|
||||
->setDueDays($invoiceConfig[7])
|
||||
->setPaymentTerms($invoiceConfig[8])
|
||||
->setVatId($faker->vat)
|
||||
->setAddress($this->generateAddress($faker))
|
||||
->setContact($this->generateContact($faker))
|
||||
->setPaymentDetails($this->generatePaymentDetails($faker))
|
||||
;
|
||||
$template->setVatId($faker->creditCardNumber());
|
||||
|
||||
$manager->persist($template);
|
||||
$manager->flush();
|
||||
@@ -68,7 +68,7 @@ class InvoiceFixtures extends Fixture
|
||||
;
|
||||
|
||||
$paymentTerms_alt =
|
||||
$faker->firstName . ', thank you very much. We really appreciate your business.' . PHP_EOL .
|
||||
$faker->firstName() . ', thank you very much. We really appreciate your business.' . PHP_EOL .
|
||||
'Please send payments before the due date. I would like to thank you for your confidence and will gladly be there for you in the future.'
|
||||
;
|
||||
|
||||
@@ -86,37 +86,37 @@ class InvoiceFixtures extends Fixture
|
||||
|
||||
// name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms
|
||||
return [
|
||||
['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company, 16, 10, $paymentTerms],
|
||||
['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company, 19, 30, $paymentTerms],
|
||||
['Freelancer (HTML, short)', 'Invoice', 'freelancer', 'short', 'default', $faker->company, 19, 14, $paymentTerms_de],
|
||||
['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company, 19, 7, $paymentTerms_alt],
|
||||
['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company(), 16, 10, $paymentTerms],
|
||||
['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company(), 19, 30, $paymentTerms],
|
||||
['Freelancer (HTML, short)', 'Invoice', 'freelancer', 'short', 'default', $faker->company(), 19, 14, $paymentTerms_de],
|
||||
['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company(), 19, 7, $paymentTerms_alt],
|
||||
['Company invoice (DOCX)', 'Invoice', 'company', 'default', 'default', 'Kimai Inc.', 19, 14, $paymentTerms_alt],
|
||||
];
|
||||
}
|
||||
|
||||
protected function generatePaymentDetails(Generator $faker)
|
||||
protected function generatePaymentDetails(Generator $faker): string
|
||||
{
|
||||
return
|
||||
'Acme Bank' . PHP_EOL .
|
||||
'Account: ' . $faker->bankAccountNumber . PHP_EOL .
|
||||
'BIC: ' . $faker->swiftBicNumber() . PHP_EOL .
|
||||
'IBAN: ' . $faker->iban('DE')
|
||||
;
|
||||
}
|
||||
|
||||
protected function generateContact(Generator $faker)
|
||||
protected function generateContact(Generator $faker): string
|
||||
{
|
||||
return
|
||||
'Phone: ' . $faker->phoneNumber . PHP_EOL .
|
||||
'Email: ' . $faker->safeEmail . PHP_EOL .
|
||||
'Web: www.' . $faker->domainName
|
||||
'Phone: ' . $faker->phoneNumber() . PHP_EOL .
|
||||
'Email: ' . $faker->safeEmail() . PHP_EOL .
|
||||
'Web: www.' . $faker->domainName()
|
||||
;
|
||||
}
|
||||
|
||||
protected function generateAddress(Generator $faker)
|
||||
protected function generateAddress(Generator $faker): string
|
||||
{
|
||||
return
|
||||
$faker->streetAddress . PHP_EOL .
|
||||
$faker->city . ', ' . $faker->stateAbbr . ' ' . $faker->postcode
|
||||
$faker->streetAddress() . PHP_EOL .
|
||||
$faker->postcode() . ' ' . $faker->city() . ', ' . $faker->country()
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
|
||||
public const MAX_PROJECTS_PER_TEAM = 5;
|
||||
|
||||
/**
|
||||
* @return class-string[]
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDependencies()
|
||||
{
|
||||
@@ -89,7 +89,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
|
||||
if (self::MAX_USERS_PER_TEAM < $maxUsers) {
|
||||
$maxUsers = self::MAX_USERS_PER_TEAM;
|
||||
}
|
||||
$userCount = mt_rand(0, $maxUsers);
|
||||
$userCount = mt_rand(1, $maxUsers);
|
||||
|
||||
$maxProjects = \count($allProjects) - 1;
|
||||
if (self::MAX_PROJECTS_PER_TEAM < $maxProjects) {
|
||||
@@ -98,10 +98,8 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
|
||||
$projectCount = mt_rand(0, $maxProjects);
|
||||
|
||||
$team = new Team();
|
||||
$team
|
||||
->setName($faker->company . ' ' . $i)
|
||||
->addTeamlead($allUsers[array_rand($allUsers)])
|
||||
;
|
||||
$team->setName($faker->company . ' ' . $i);
|
||||
$team->addTeamlead($allUsers[array_rand($allUsers)]);
|
||||
|
||||
if ($userCount > 0) {
|
||||
$userKeys = array_rand($allUsers, $userCount);
|
||||
|
||||
@@ -167,17 +167,17 @@ class Team
|
||||
throw new \InvalidArgumentException('Cannot set foreign team membership');
|
||||
}
|
||||
|
||||
if (null !== ($existing = $this->findMember($member))) {
|
||||
$existing->setTeamlead($member->isTeamlead());
|
||||
|
||||
// when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
|
||||
if ($member->getUser() === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
|
||||
if ($member->getUser() !== null) {
|
||||
$this->members->add($member);
|
||||
$member->getUser()->addMembership($member);
|
||||
if (null !== ($existing = $this->findMember($member))) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->members->add($member);
|
||||
$member->getUser()->addMembership($member);
|
||||
}
|
||||
|
||||
public function hasMember(TeamMember $member): bool
|
||||
@@ -196,10 +196,20 @@ class Team
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findMemberByUser(User $user): ?TeamMember
|
||||
{
|
||||
foreach ($this->members as $oldMember) {
|
||||
if ($oldMember->getUser() === $user) {
|
||||
return $oldMember;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function removeMember(TeamMember $member): void
|
||||
{
|
||||
$existingMember = $this->findMember($member);
|
||||
if ($existingMember === null) {
|
||||
if (null === ($existingMember = $this->findMember($member))) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -246,10 +256,8 @@ class Team
|
||||
|
||||
public function isTeamlead(User $user): bool
|
||||
{
|
||||
foreach ($this->members as $member) {
|
||||
if ($user === $member->getUser()) {
|
||||
return $member->isTeamlead();
|
||||
}
|
||||
if (null !== ($member = $this->findMemberByUser($user))) {
|
||||
return $member->isTeamlead();
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -266,34 +274,37 @@ class Team
|
||||
|
||||
public function addTeamlead(User $user): void
|
||||
{
|
||||
$this->addUser($user, true);
|
||||
if (null !== ($member = $this->findMemberByUser($user))) {
|
||||
$member->setTeamlead(true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$member = new TeamMember();
|
||||
$member->setTeam($this);
|
||||
$member->setUser($user);
|
||||
$member->setTeamlead(true);
|
||||
|
||||
$this->addMember($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will only remove the teamlead flag, not the user from the team.
|
||||
* Removes the teamlead flag, but leaves the user within the team.
|
||||
*
|
||||
* @param User $user
|
||||
*/
|
||||
public function removeTeamlead(User $user): void
|
||||
public function demoteTeamlead(User $user): void
|
||||
{
|
||||
foreach ($this->members as $member) {
|
||||
if ($member->getUser() === $user) {
|
||||
$member->setTeamlead(false);
|
||||
if (null !== ($member = $this->findMemberByUser($user))) {
|
||||
$member->setTeamlead(false);
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public function hasUser(User $user): bool
|
||||
{
|
||||
foreach ($this->members as $member) {
|
||||
if ($member->getUser() === $user) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return (null !== ($member = $this->findMemberByUser($user)));
|
||||
}
|
||||
|
||||
public function hasUsers(): bool
|
||||
@@ -312,39 +323,24 @@ class Team
|
||||
return false;
|
||||
}
|
||||
|
||||
public function addUser(User $user, bool $teamlead = false): void
|
||||
public function addUser(User $user): void
|
||||
{
|
||||
foreach ($this->members as $member) {
|
||||
if ($member->getUser() === $user) {
|
||||
$member->setTeamlead($teamlead);
|
||||
|
||||
return;
|
||||
}
|
||||
if (null !== ($member = $this->findMemberByUser($user))) {
|
||||
return;
|
||||
}
|
||||
|
||||
$member = new TeamMember();
|
||||
$member->setTeam($this);
|
||||
$member->setUser($user);
|
||||
$member->setTeamlead($teamlead);
|
||||
|
||||
$this->addMember($member);
|
||||
}
|
||||
|
||||
public function removeUser(User $user): void
|
||||
{
|
||||
$memberToRemove = null;
|
||||
foreach ($this->members as $member) {
|
||||
if ($member->getUser() === $user) {
|
||||
$memberToRemove = $member;
|
||||
break;
|
||||
}
|
||||
if (null !== ($member = $this->findMemberByUser($user))) {
|
||||
$this->removeMember($member);
|
||||
}
|
||||
|
||||
if ($memberToRemove === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->removeMember($memberToRemove);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -355,9 +351,9 @@ class Team
|
||||
* @Serializer\Groups({"Team_Entity"})
|
||||
* @SWG\Property(ref="#/definitions/User")
|
||||
*
|
||||
* @return array<User>
|
||||
* @return User[]
|
||||
*/
|
||||
public function getUsers(): iterable
|
||||
public function getUsers(): array
|
||||
{
|
||||
$users = [];
|
||||
foreach ($this->members as $member) {
|
||||
|
||||
@@ -522,28 +522,27 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
throw new \InvalidArgumentException('Cannot set foreign user membership');
|
||||
}
|
||||
|
||||
if (null !== ($existing = $this->findMember($member))) {
|
||||
$existing->setTeamlead($member->isTeamlead());
|
||||
|
||||
// when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
|
||||
if ($member->getTeam() === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// when using the API an invalid team id does not trigger the validation first, but after calling this method :-(
|
||||
if ($member->getTeam() !== null) {
|
||||
$this->memberships->add($member);
|
||||
$member->getTeam()->addMember($member);
|
||||
if (null !== ($existing = $this->findMember($member))) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->memberships->add($member);
|
||||
$member->getTeam()->addMember($member);
|
||||
}
|
||||
|
||||
public function removeMembership(TeamMember $member): void
|
||||
{
|
||||
$existingMember = $this->findMember($member);
|
||||
if ($existingMember === null) {
|
||||
if (null === ($member = $this->findMember($member))) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->memberships->removeElement($existingMember);
|
||||
$existingMember->getUser()->removeMembership($existingMember);
|
||||
$this->memberships->removeElement($member);
|
||||
$member->getUser()->removeMembership($member);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -85,9 +85,9 @@ abstract class AbstractToolbarForm extends AbstractType
|
||||
]);
|
||||
}
|
||||
|
||||
protected function addTeamsChoice(FormBuilderInterface $builder, string $field = 'teams')
|
||||
protected function addTeamsChoice(FormBuilderInterface $builder, string $field = 'teams', array $options = [])
|
||||
{
|
||||
$builder->add($field, TeamType::class, [
|
||||
$builder->add($field, TeamType::class, array_merge([
|
||||
'documentation' => [
|
||||
'type' => 'array',
|
||||
'items' => ['type' => 'integer', 'description' => 'Team ID'],
|
||||
@@ -96,7 +96,7 @@ abstract class AbstractToolbarForm extends AbstractType
|
||||
'label' => 'label.team',
|
||||
'multiple' => true,
|
||||
'required' => false,
|
||||
]);
|
||||
], $options));
|
||||
}
|
||||
|
||||
protected function addCustomerChoice(FormBuilderInterface $builder, array $options = [], bool $multiProject = false)
|
||||
|
||||
@@ -14,6 +14,9 @@ namespace DoctrineMigrations;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* @version 1.15
|
||||
*/
|
||||
final class Version20210719123928 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
|
||||
Reference in New Issue
Block a user