/**
  *
  * @param sfWebRequest $request
  * @param ImputationAccountTransactionForm $form
  */
 private function processAccountTransactionForm(sfWebRequest $request, ImputationAccountTransactionForm $form)
 {
     $parameters = $request->getParameter($form->getName());
     if ($parameters['imputation']['account_id'] == 0) {
         $parameters['imputation']['account_id'] = null;
         $this->error_account = true;
     }
     if ($parameters['quantity'] != '') {
         $parameters['sum'] = -$parameters['quantity'];
         $parameters['imputation']['total'] = 0;
         $parameters['imputation']['method_of_payment_id'] = ImputationDefaultValues::getFreeMethodId();
         unset($parameters['unitary_price']);
         unset($parameters['quantity']);
         $this->error_account = false;
     }
     $form->bind($parameters);
     if ($form->isValid()) {
         $transaction = $form->save();
         $account = Doctrine::getTable('Account')->find($parameters['imputation']['account_id']);
         $account->setValue($account->getValue() + $parameters['sum']);
         $account->save();
         if ($parameters['imputation']['method_of_payment_id'] == ImputationDefaultValues::getAccountMethodId()) {
             //If the method of payment is 'account':
             //Find the target account (the account used to pay):
             $target_account = Doctrine::getTable('Account')->find($parameters['account_to_pay_id']);
             $parameters_to_pay = $parameters;
             $parameters_to_pay['sum'] = $parameters['imputation']['total'];
             $parameters_to_pay['imputation']['total'] = $parameters_to_pay['sum'];
             $parameters_to_pay['imputation']['account_id'] = $parameters['account_to_pay_id'];
             $parameters_to_pay['imputation']['unity_id'] = $target_account->getAct()->getUnityId();
             //print_r($parameters_to_pay);exit(-1);
             //Duplicate the form:
             $transaction = new ImputationAccountTransaction();
             $transaction->getImputation()->setUserId($parameters['imputation']['user_id']);
             $form_to_pay = new ImputationAccountTransactionForm($transaction, array('culture' => ParametersConfiguration::getDefault('default_language')));
             //Bind it with the duplicate parameters:
             $form_to_pay->bind($parameters_to_pay);
             if ($form_to_pay->isValid()) {
                 //If the form is valid, change the target account value:
                 $target_account->setValue($target_account->getValue() - $parameters_to_pay['sum']);
                 $target_account->save();
                 //Eventually if the form is valid, save the duplicated form:
                 $form_to_pay->save();
                 $this->error_account = false;
             }
         } else {
             $this->error_account = true;
         }
         $this->redirect('use/index');
     }
 }
 /**
  * 
  * @param $parameters
  */
 public static function buildAndSaveTransactionFrom($parameters)
 {
     /* --- Duplicate the parameters: --- */
     $parameters_account_transaction = $parameters;
     /* --- Change the parameters: --- */
     /* --- Unset those who do not correspond to an account transaction: --- */
     $parameters_account_transaction = ImputationAccountTransaction::unsetFieldsByType($parameters_account_transaction, $parameters_account_transaction['imputation']['imputation_type']);
     /* --- Add the missing ones: --- */
     $parameters_account_transaction['sum'] = $parameters_account_transaction['imputation']['total'];
     /* --- Modify those who need to be modified --- */
     $parameters_account_transaction['imputation']['imputation_type'] = ImputationDefaultValues::ACCOUNT_TRANSACTION_TYPE;
     $parameters_account_transaction['imputation']['total'] = -$parameters_account_transaction['imputation']['total'];
     /* --- Create a form of type 'account transaction': --- */
     $transaction = new ImputationAccountTransaction();
     $transaction->getImputation()->setUserId($parameters_account_transaction['imputation']['user_id']);
     $form_account_transaction = new ImputationAccountTransactionForm($transaction, array('culture' => ParametersConfiguration::getDefault('default_language')));
     //Bind the form to the new parameters:
     $form_account_transaction->bind($parameters_account_transaction);
     //Save it if it's valid:
     if ($form_account_transaction->isValid() && $parameters['imputation']['account_id'] != 0) {
         /* --- Decrement the corresponding account: --- */
         $account = Doctrine::getTable('Account')->find($parameters['imputation']['account_id']);
         $account->setValue($account->getValue() - $parameters['imputation']['total']);
         $account->save();
         $form_account_transaction->save();
         return true;
     } else {
         return false;
     }
 }