예제 #1
0
 /**
  * Executes the action
  *
  * @param Transaction $transaction
  * @param RuleAction $action
  * @return bool
  */
 public function executeAction(Transaction $transaction, RuleAction $action)
 {
     $params = $this->getParams($action);
     $repo = $this->entityManager->getRepository('HomefinanceBundle:Category');
     $category = $repo->findOneBy(array('id' => $params['category_id']));
     $transaction->setCategory($category);
 }
예제 #2
0
 protected function areConditionsValid(Transaction $transaction, Rule $rule)
 {
     if ($transaction->isProcessed()) {
         return false;
     }
     $isValid = true;
     $firstCondition = true;
     foreach ($rule->getConditions() as $condition) {
         $conditionClass = $this->factory->getConditionClass($condition->getCondition());
         $conditionIsValid = $conditionClass->checkCondition($transaction, $condition);
         if ($firstCondition) {
             $isValid = $conditionIsValid ? true : false;
             $firstCondition = false;
         } elseif ($condition->getConditionLink() == 'OR') {
             if ($isValid || $conditionIsValid) {
                 $isValid = true;
             } else {
                 $isValid = false;
             }
         } else {
             if ($isValid && $conditionIsValid) {
                 $isValid = true;
             } else {
                 $isValid = false;
             }
         }
     }
     return $isValid;
 }
예제 #3
0
 /**
  * Checks whether this condition is true for the given transaction
  *
  * @param Transaction $transaction
  * @param RuleCondition $condition
  * @return bool
  */
 public function checkCondition(Transaction $transaction, RuleCondition $condition)
 {
     $params = $this->getParams($condition);
     if (stripos(trim($transaction->getName()), $params['name']) !== false) {
         return true;
     }
     return false;
 }
예제 #4
0
 /**
  * Checks whether this condition is true for the given transaction
  *
  * @param Transaction $transaction
  * @param RuleCondition $condition
  * @return bool
  */
 public function checkCondition(Transaction $transaction, RuleCondition $condition)
 {
     $params = $this->getParams($condition);
     if ($params['iban'] == $transaction->getIban()) {
         return true;
     }
     return false;
 }
 /**
  * Checks whether this condition is true for the given transaction
  *
  * @param Transaction $transaction
  * @param RuleCondition $condition
  * @return bool
  */
 public function checkCondition(Transaction $transaction, RuleCondition $condition)
 {
     $params = $this->getParams($condition);
     if (stripos(trim($transaction->getDescription()), $params['description']) === 0) {
         return true;
     }
     return false;
 }
예제 #6
0
 /**
  * Checks whether this condition is true for the given transaction
  *
  * @param Transaction $transaction
  * @param RuleCondition $condition
  * @return bool
  */
 public function checkCondition(Transaction $transaction, RuleCondition $condition)
 {
     $params = $this->getParams($condition);
     $result = strcasecmp($params['name'], $transaction->getName());
     if ($result === 0) {
         return true;
     }
     return false;
 }
예제 #7
0
 /**
  * Executes the action
  *
  * @param Transaction $transaction
  * @param RuleAction $action
  * @return bool
  */
 public function executeAction(Transaction $transaction, RuleAction $action)
 {
     $params = $this->getParams($action);
     $repo = $this->entityManager->getRepository('HomefinanceBundle:Tag');
     foreach ($params['tag_ids'] as $tag_id) {
         $tag = $repo->findOneBy(array('id' => $tag_id));
         if ($tag && !$transaction->getTags()->contains($tag)) {
             $transaction->getTags()->add($tag);
         }
     }
 }
예제 #8
0
 public function getNextUnprocessedTransaction(Administration $administration, Transaction $transaction = null)
 {
     $repo = $this->entityManager->getRepository('HomefinanceBundle:Transaction');
     $transactions = $repo->findUnprocessedByAdministration($administration);
     $found = false;
     if ($transaction != null) {
         foreach ($transactions as $t) {
             if ($found) {
                 return $t;
             }
             if ($t->getId() == $transaction->getId()) {
                 $found = true;
             }
         }
     }
     if (count($transactions)) {
         return reset($transactions);
     }
     return null;
 }
예제 #9
0
 /**
  * Executes the action
  *
  * @param Transaction $transaction
  * @param RuleAction $action
  * @return bool
  */
 public function executeAction(Transaction $transaction, RuleAction $action)
 {
     $transaction->setProcessed(true);
 }
예제 #10
0
 protected function createTransactionFromRow($row, Administration $administration)
 {
     $transaction = new Transaction();
     $transaction->setAdministration($administration);
     $bankAccount = $this->bankAccountManager->findBankAccount($row[1], $administration);
     if (!$bankAccount || $row[1] != $bankAccount->getIban()) {
         throw new InvalidBankAccountException();
     }
     $transaction->setBankAccount($bankAccount);
     if ($row[9] != 'EUR') {
         throw new InvalidCurrencyException();
     }
     $transaction->setDate(new \DateTime($row[0]));
     //boekdatum
     $amount = (double) $row[10];
     $transaction->setAmount($amount);
     $transaction->setIban($row[2]);
     $transaction->setName($row[3]);
     $description = $row[16] . "\r\n" . $row[17];
     $description = trim($description);
     $transaction->setDescription($description);
     if (empty($transaction->getName())) {
         $transaction->setName(strtok($description, "\r\n"));
     }
     $transaction->setSourceData(json_encode($row));
     $transaction->setSourceId(md5($row[11] . $row[15]));
     return $transaction;
 }
 protected function edit(Transaction $transaction, Request $request, $redirect = nul)
 {
     $repo = $this->getDoctrine()->getRepository('HomefinanceBundle:BankAccount');
     $bank_accounts = $repo->choices($transaction->getAdministration());
     $transactionManager = $this->get('homefinance.transaction.manager');
     $tagManager = $this->get('homefinance.tag.manager');
     $tags = $tagManager->listAllTags();
     $categoryManager = $this->get('homefinance.category.manager');
     $categories = $categoryManager->allLeafCategories();
     $form = $this->createForm('transaction', $transaction, array('bank_accounts' => $bank_accounts, 'categories' => $categories));
     if ($transaction->getId() && !$transaction->isProcessed()) {
         $form->add('save_process_next', 'submit', array('label' => 'transaction.save_process_next.btn-label', 'attr' => array('class' => 'btn btn-lg btn-success')));
         $form->add('cancel_and_next', 'submit', array('label' => 'transaction.cancel_and_next.btn-label', 'attr' => array('class' => 'btn btn-lg btn-warning')));
     }
     $form->handleRequest($request);
     if ($form->isValid()) {
         $em = $this->getDoctrine()->getManager();
         $nextTransaction = null;
         if ($form->has('save_process_next') && $form->get('save_process_next')->isClicked()) {
             $nextTransaction = $transactionManager->getNextUnprocessedTransaction($transaction->getAdministration(), $transaction);
         } elseif ($form->has('cancel_and_next') && $form->get('cancel_and_next')->isClicked()) {
             $nextTransaction = $transactionManager->getNextUnprocessedTransaction($transaction->getAdministration(), $transaction);
             return $this->redirect($this->generateUrl('transaction_edit', array('id' => $nextTransaction->getId())));
         }
         $transaction->setProcessed(true);
         $engine = $this->get('homefinance.rules.engine');
         $engine->triggerOnTransaction($transaction);
         $em->persist($transaction);
         $em->flush();
         $this->addFlash('success', 'transaction.updated');
         if ($nextTransaction != null) {
             return $this->redirect($this->generateUrl('transaction_edit', array('id' => $nextTransaction->getId())));
         }
         if ($redirect) {
             return $this->redirect($this->generateUrl($redirect));
         }
         return $this->redirect($this->generateUrl('list_unprocessed_transactions'));
     }
     return $this->render('HomefinanceBundle:Transaction:edit.html.twig', array('form' => $form->createView(), 'tags' => $tags, 'transaction' => $transaction));
 }