/** * Adds the Pro-Rating discount to an invoice. * * @since 1.0.1.0 * @param MS_Model_Invoice $invoice * @return MS_Model_Invoice Modified Invoice. */ public function add_discount($invoice) { // Only the first invoice can be pro-rated. if ($invoice->invoice_number > 1) { return $invoice; } $subscription = $invoice->get_subscription(); $membership = $invoice->get_membership(); if (!$subscription->move_from_id) { return $invoice; } $ids = explode(',', $subscription->move_from_id); if (empty($ids)) { return $invoice; } if ($membership->is_free()) { return $invoice; } // Calc pro rate discount if moving from another membership. $pro_rate = 0; foreach ($ids as $id) { if (!$id) { continue; } $move_from = MS_Model_Relationship::get_subscription($subscription->user_id, $id); if ($move_from->is_valid() && $move_from->id == $id) { $pro_rate += $this->get_discount($move_from); } } $pro_rate = floatval(apply_filters('ms_addon_prorate_apply_discount', abs($pro_rate), $invoice)); if ($pro_rate > $invoice->amount) { $pro_rate = $invoice->amount; } if ($pro_rate > 0) { $invoice->pro_rate = $pro_rate; $notes[] = sprintf(__('Pro-Rate Discount: %s.', MS_TEXT_DOMAIN) . ' ', $invoice->currency . ' ' . $pro_rate); } return $invoice; }
/** * Adds the Pro-Rating discount to an invoice. * * @since 1.0.1.0 * @param MS_Model_Invoice $invoice * @return MS_Model_Invoice Modified Invoice. */ public function add_discount($invoice) { $subscription = $invoice->get_subscription(); // If memberships were already cancelled don't pro-rate again! if ($subscription->cancelled_memberships) { return $invoice; } $membership = $invoice->get_membership(); if (!$subscription->move_from_id) { return $invoice; } $ids = explode(',', $subscription->move_from_id); if (empty($ids)) { return $invoice; } if ($membership->is_free()) { return $invoice; } // Calc pro rate discount if moving from another membership. $pro_rate = 0; foreach ($ids as $id) { if (!$id) { continue; } $move_from = MS_Model_Relationship::get_subscription($subscription->user_id, $id); if ($move_from->is_valid() && $move_from->membership_id == $id) { $pro_rate += $this->get_discount($move_from); } } $pro_rate = floatval(apply_filters('ms_addon_prorate_apply_discount', abs($pro_rate), $invoice)); if ($pro_rate > $invoice->amount) { $pro_rate = $invoice->amount; } if ($pro_rate > 0) { $invoice->pro_rate = $pro_rate; $notes[] = sprintf(__('Pro-Rate Discount: %s.', 'membership2') . ' ', $invoice->currency . ' ' . $pro_rate); } return $invoice; }
/** * When an invoice was paid we need to notify taxamo of the transaction. * * @since 1.0.0 * @param MS_Model_Invoice $invoice The processed invoice. */ public function invoice_paid($invoice) { if (!$invoice->is_paid()) { return; } if (0 == $invoice->total) { return; } $membership = $invoice->get_membership(); $member = $invoice->get_member(); MS_Addon_Taxamo_Api::register_payment($invoice->total, $membership->name, $invoice->tax_rate, $invoice->get_invoice_number(), $member->full_name, $member->email, $invoice->gateway_id, $invoice->currency, $invoice->checkout_ip); }
/** * Creates a subscription that starts immediately. * * @since 1.0.0 * @internal * * @param M2_Stripe_Customer $customer Stripe customer to charge. * @param MS_Model_Invoice $invoice The relevant invoice. * @return M2_Stripe_Subscription The resulting charge object. */ public function subscribe($customer, $invoice) { $membership = $invoice->get_membership(); $plan_id = MS_Gateway_Stripeplan::get_the_id($membership->id, 'plan'); $subscription = self::get_subscription($customer, $membership); /* * If no active subscription was found for the membership create it. */ if (!$subscription) { $tax_percent = null; $coupon_id = null; if (is_numeric($invoice->tax_rate) && $invoice->tax_rate > 0) { $tax_percent = floatval($invoice->tax_rate); } if ($invoice->coupon_id) { $coupon_id = MS_Gateway_Stripeplan::get_the_id($invoice->coupon_id, 'coupon'); } $args = array('plan' => $plan_id, 'tax_percent' => $tax_percent, 'coupon' => $coupon_id); $subscription = $customer->subscriptions->create($args); } return apply_filters('ms_gateway_stripe_subscribe', $subscription, $customer, $invoice, $membership, $this); }
/** * Called right before the payment form on the front end is displayed. * We check if the user already specified an invitation code or not. * * If no code was specified then we remove all payment buttons and display * an input field for the invitation code instead. * * @since 1.0.1.0 * @param bool $flag The original Skip-Form flag. * @param MS_Model_Invoice $invoice * @param MS_View $view The parent view. * @return bool The modified Skip-Form flag. */ public function do_not_skip($flag, $invoice, $view) { $membership = $invoice->get_membership(); $is_public = lib3()->is_true($membership->get_custom_data('no_invitation')); if (!$is_public) { // Do not skip the form! $flag = false; } return $flag; }