/**
  * update registration REG_paid field after successful payment and link registration with payment
  *
  * @param EE_Registration $registration
  * @param EE_Payment $payment
  * @param float $payment_amount
  * @return float
  * @throws \EE_Error
  */
 protected function _apply_registration_payment(EE_Registration $registration, EE_Payment $payment, $payment_amount = 0.0)
 {
     // find any existing reg payment records for this registration and payment
     $existing_reg_payment = EEM_Registration_Payment::instance()->get_one(array(array('REG_ID' => $registration->ID(), 'PAY_ID' => $payment->ID())));
     // if existing registration payment exists
     if ($existing_reg_payment instanceof EE_Registration_Payment) {
         // then update that record
         $existing_reg_payment->set_amount($payment_amount);
         $existing_reg_payment->save();
     } else {
         // or add new relation between registration and payment and set amount
         $registration->_add_relation_to($payment, 'Payment', array('RPY_amount' => $payment_amount));
         // make it stick
         $registration->save();
     }
 }
 /**
  *    _associate_attendee_with_registration
  *
  * @param EE_Registration $registration
  * @param EE_Attendee     $attendee
  * @return void
  */
 private function _associate_attendee_with_registration(EE_Registration $registration, EE_Attendee $attendee)
 {
     // add relation to attendee
     $registration->_add_relation_to($attendee, 'Attendee');
     $registration->set_attendee_id($attendee->ID());
     $registration->update_cache_after_object_save('Attendee', $attendee);
 }
 /**
  * This handles connecting a registration to related items when the chained flag is true.
  *
  * @since 4.3.0
  *
  * @param EE_Registration $registration
  * @param array $args incoming arguments from caller for specifying overrides.
  *
  * @return EE_Registration
  */
 private function _maybe_chained(EE_Registration $registration, $args)
 {
     if ($this->_chained) {
         if (empty($this->_transaction) || empty($this->_ticket) || empty($this->_attendee) || empty($this->_status)) {
             $this->_set_new_relations($args);
         }
         //add relation to transaction
         $registration->_add_relation_to($this->_transaction, 'Transaction');
         //add relation to ticket
         $registration->_add_relation_to($this->_ticket, 'Ticket');
         //add relation to event
         $event = $this->_ticket->get_first_related('Datetime')->get_first_related('Event');
         $registration->_add_relation_to($event, 'Event');
         //add relation to attendee
         $registration->_add_relation_to($this->_attendee, 'Attendee');
         //add relation to status
         $registration->_add_relation_to($this->_status, 'Status');
         $registration->save();
         return $registration;
     }
     return $registration;
 }