/** * 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; }