/**
  * Called by MS_Model_Invoice before a new invoice is saved. We apply the
  * coupon discount to the total amount, if a coupon was used.
  *
  * @since  1.0.0
  * @param  MS_Model_Invoice $invoice
  * @param  MS_Model_Relationship $subscription
  * @return MS_Model_Invoice
  */
 public function apply_discount($invoice, $subscription)
 {
     $membership = $subscription->get_membership();
     $member = MS_Factory::load('MS_Model_Member', $subscription->user_id);
     if (isset($_POST['apply_coupon_code'])) {
         $coupon = apply_filters('ms_addon_coupon_model', MS_Addon_Coupon_Model::load_by_code($_POST['coupon_code']));
         $coupon->save_application($subscription);
     } else {
         $coupon = MS_Addon_Coupon_Model::get_application($member->id, $membership->id);
         if (!empty($_POST['remove_coupon_code'])) {
             $note = sprintf(__('Remove Coupon "%s"', MS_TEXT_DOMAIN), $coupon->code);
             $invoice->add_notes($note);
             $coupon->remove_application($member->id, $membership->id);
             $coupon = false;
         }
     }
     self::the_coupon($coupon);
     if ($coupon && $coupon->is_valid($membership->id)) {
         $discount = $coupon->get_discount_value($subscription);
         $invoice->coupon_id = $coupon->id;
         $invoice->discount = $discount;
         $note = sprintf(__('Apply Coupon "%s": Discount %s %s!', MS_TEXT_DOMAIN), $coupon->code, $invoice->currency, $discount);
         $invoice->add_notes($note);
     } else {
         $invoice->coupon_id = '';
         $invoice->discount = 0;
     }
     return $invoice;
 }