protected function validateFields(FormInterface $form, $data) { if (!in_array($data->getType(), OneTimeContribution::getTypeChoices())) { $form->get('type')->addError(new FormError('Choose an option.')); } else { if ($data->getType() == OneTimeContribution::TYPE_FUNDING_BANK) { $bankInformationValidator = new BankInformationFormValidator($form->get('bankInformation'), $data->getBankInformation()); $bankInformationValidator->validate(); if (!$data->getStartTransferDate() instanceof \DateTime) { $form->get('start_transfer_date_month')->addError(new FormError('Enter correct date.')); } else { $minDate = new \DateTime('+5 days'); if ($data->getStartTransferDate() < $minDate) { $form->get('start_transfer_date_month')->addError(new FormError("The start of your transfer should be at least 5 days after today’s date.")); } } if (!$data->getAmount()) { $form->get('amount')->addError(new FormError('Required.')); } if ($form->has('transaction_frequency')) { $frequency = $form->get('transaction_frequency')->getData(); if (null === $frequency || !is_numeric($frequency)) { $form->get('transaction_frequency')->addError(new FormError('Choose an option.')); } } if ($form->has('contribution_year')) { $contributionYear = $data->getContributionYear(); if (null === $contributionYear || !is_numeric($contributionYear)) { $form->get('contribution_year')->addError(new FormError('Enter valid year.')); } else { $currDate = new \DateTime(); $currYear = $currDate->format('Y'); $minDate = new \DateTime($currYear . '-01-01'); $maxDate = new \DateTime($currYear . '-04-15'); $startTransferDate = $data->getStartTransferDate(); if ($startTransferDate < $minDate || $startTransferDate > $maxDate) { if ($contributionYear !== $currYear) { $form->get('contribution_year')->addError(new FormError(sprintf('Value should be equal %s', $currYear))); } } else { $prevYear = $currDate->add(\DateInterval::createFromDateString('-1 year'))->format('Y'); if ($contributionYear !== $currYear && $contributionYear !== $prevYear) { $form->get('contribution_year')->addError(new FormError(sprintf('Value should be equal %s or %s', $prevYear, $currYear))); } } } } } } }
/** * Build data for contribution form with one_time action * * @param ClientAccount $clientAccount * @param AccountContribution $existContribution * @return OneTimeContribution */ private function buildOneTimeContributionData(ClientAccount $clientAccount, AccountContribution $existContribution = null) { $data = new OneTimeContribution(); $data->setSystemAccount($clientAccount->getSystemAccount()); if ($existContribution) { $data->setBankInformation($existContribution->getBankInformation()); if ($existContribution->isOneTimeContribution()) { $data->setContributionYear($existContribution->getContributionYear()); $data->setStartTransferDate($existContribution->getStartTransferDate()); $data->setAmount($existContribution->getAmount()); } } return $data; }