public static function get_recurring_payment(SI_Invoice $invoice)
 {
     $payment_ids = $invoice->get_payments();
     if (empty($payment_ids)) {
         return 0;
     }
     $r_payment_id = 0;
     foreach ($payment_ids as $pid) {
         if (in_array(get_post_status($pid), array(SI_Payment::STATUS_RECURRING, SI_Payment::STATUS_CANCELLED))) {
             $r_payment_id = $pid;
         }
     }
     if (!$r_payment_id) {
         return false;
     }
     $payment = SI_Payment::get_instance($r_payment_id);
     return $payment;
 }
 public static function invoice_data(SI_Invoice $invoice)
 {
     $invoice_data = array('title' => $invoice->get_title(), 'id' => $invoice->get_id(), 'invoice_id' => $invoice->get_invoice_id(), 'status' => $invoice->get_status(), 'balance' => $invoice->get_balance(), 'deposit' => $invoice->get_deposit(), 'issue_date' => $invoice->get_issue_date(), 'estimate_id' => $invoice->get_estimate_id(), 'due_date' => $invoice->get_due_date(), 'expiration_date' => $invoice->get_expiration_date(), 'client_id' => $invoice->get_client_id(), 'client_data' => array(), 'po_number' => $invoice->get_po_number(), 'discount' => $invoice->get_discount(), 'tax' => $invoice->get_tax(), 'tax2' => $invoice->get_tax2(), 'currency' => $invoice->get_currency(), 'subtotal' => $invoice->get_subtotal(), 'calculated_total' => $invoice->get_calculated_total(), 'project_id' => $invoice->get_project_id(), 'terms' => $invoice->get_terms(), 'notes' => $invoice->get_notes(), 'line_items' => $invoice->get_line_items(), 'user_id' => $invoice->get_user_id(), 'payment_ids' => $invoice->get_payments());
     if ($invoice->get_client_id()) {
         $client = SI_Client::get_instance($invoice->get_client_id());
         if (is_a($client, 'SI_Client')) {
             $invoice_data['client_data'] = self::client_data($client);
         }
     }
     return $invoice_data;
 }
 /**
  * Build the NVP data array for submitting the current checkout to PayPal as an Authorization request
  *
  * @param SI_Checkouts $checkout
  * @param SI_Invoice $invoice
  * @return array
  */
 private function process_nvp_data(SI_Checkouts $checkout, SI_Invoice $invoice)
 {
     $client = $invoice->get_client();
     $payments = $invoice->get_payments();
     $user = si_who_is_paying($invoice);
     // User email or none
     $user_email = $user ? $user->user_email : '';
     $nvpData = array();
     $nvpData['USER'] = self::$api_username;
     $nvpData['PWD'] = self::$api_password;
     $nvpData['SIGNATURE'] = self::$api_signature;
     $nvpData['VERSION'] = self::$version;
     $nvpData['TOKEN'] = self::get_token();
     $nvpData['PAYERID'] = self::get_payerid();
     $nvpData['METHOD'] = 'DoExpressCheckoutPayment';
     $nvpData['PAYMENTREQUEST_0_PAYMENTACTION'] = 'Authorization';
     $nvpData['IPADDRESS'] = $_SERVER['REMOTE_ADDR'];
     $payment_amount = si_has_invoice_deposit($invoice->get_id()) ? $invoice->get_deposit() : $invoice->get_balance();
     $nvpData['PAYMENTREQUEST_0_AMT'] = si_get_number_format($payment_amount);
     $nvpData['PAYMENTREQUEST_0_CURRENCYCODE'] = self::get_currency_code($invoice->get_id());
     $item_amount = si_has_invoice_deposit($invoice->get_id()) ? $invoice->get_deposit() : $invoice->get_balance() - ($invoice->get_tax_total() + $invoice->get_tax2_total());
     $nvpData['PAYMENTREQUEST_0_ITEMAMT'] = si_get_number_format($item_amount);
     $nvpData['PAYMENTREQUEST_0_INVNUM'] = $invoice->get_id() . '#' . count($payments);
     // $nvpData['PAYMENTREQUEST_0_SHIPPINGAMT'] = si_get_number_format( $invoice->get_shipping_total() ); // FUTURE
     $tax_amount = si_has_invoice_deposit($invoice->get_id()) ? 0 : $invoice->get_tax_total() + $invoice->get_tax2_total();
     $nvpData['PAYMENTREQUEST_0_TAXAMT'] = si_get_number_format($tax_amount);
     $nvpData['BUTTONSOURCE'] = self::PLUGIN_NAME;
     $nvpData += self::payment_request_line_items($invoice);
     $nvpData = apply_filters('si_paypal_ec_nvp_data', $nvpData, $checkout, $i, $invoice);
     return $nvpData;
 }