Files
shuffle_and_skirmish_website/wp-content/plugins/woocommerce-payments/includes/notes/class-wc-payments-notes-loan-approved.php
2025-11-24 21:33:55 +00:00

171 lines
4.9 KiB
PHP

<?php
/**
* Display a notice to merchants that have WCPay installed to inform them
* that a loan offer has been approved from Stripe.
*
* @package WooCommerce\Payments\Admin
*/
use Automattic\WooCommerce\Admin\Notes\Note;
use Automattic\WooCommerce\Admin\Notes\Notes;
use Automattic\WooCommerce\Admin\Notes\NoteTraits;
defined( 'ABSPATH' ) || exit;
/**
* Class WC_Payments_Notes_Loan_Approved
*/
class WC_Payments_Notes_Loan_Approved {
use NoteTraits;
/**
* Prefix of the note for use in the database.
*/
const NOTE_NAME = 'wc-payments-notes-loan-approved';
/**
* Nonce action name
*/
const NOTE_ACTION = 'view-capital-page';
/**
* Loan information to build the message.
*
* @var array
*/
private static $loan_info;
/**
* Get the note.
*/
public static function get_note() {
$note = new Note();
$dummy_order = wc_create_order();
$dummy_order->set_currency( self::$loan_info['details']['currency'] );
$note->set_title( __( 'Your capital loan has been approved!', 'woocommerce-payments' ) );
$note->set_content(
sprintf(
/* Translators: %1: total amount lent to the merchant formatted in the account currency, %2: WooPayments */
__(
'Congratulations! Your capital loan has been approved and %1$s was deposited into the bank account linked to %2$s. You\'ll automatically repay the loan, plus a flat fee, through a fixed percentage of each %2$s transaction.',
'woocommerce-payments'
),
WC_Payments_Explicit_Price_Formatter::get_explicit_price(
wc_price(
WC_Payments_Utils::interpret_stripe_amount( self::$loan_info['details']['advance_amount'] ),
[ 'currency' => self::$loan_info['details']['currency'] ]
),
$dummy_order
),
'WooPayments'
)
);
$note->set_content_data(
(object) [
'advance_amount' => self::$loan_info['details']['advance_amount'],
'advance_paid_out_at' => self::$loan_info['details']['advance_paid_out_at'],
]
);
$note->set_type( Note::E_WC_ADMIN_NOTE_INFORMATIONAL );
$note->set_name( self::NOTE_NAME );
$note->set_source( 'woocommerce-payments' );
$note->add_action(
self::NOTE_NAME,
__( 'View loan details', 'woocommerce-payments' ),
admin_url( 'admin.php?page=wc-admin&path=/payments/loans' ),
Note::E_WC_ADMIN_NOTE_UNACTIONED,
true
);
return $note;
}
/**
* Add the note if it passes predefined conditions.
*/
public static function possibly_add_note() {
// If we have the correct information, proceed. Otherwise, delete existing notes.
if ( ! self::validate_inputs() ) {
// We don't have the necessary info to create a note, do nothing.
return;
}
// Check if the current loan info matches with the received one. If it matches, don't add a new one.
if ( ! self::check_attached_loan_data_is_different() ) {
// Loan paid out dates are the same, do nothing.
return;
}
// Do the overridden work.
if ( ! self::can_be_added() ) {
return;
}
$new_note = self::get_note();
$new_note->save();
}
/**
* Check if the stored loan info has all the values we need.
*
* @return bool
*/
private static function validate_inputs() {
// If the loan amount isn't set correctly, don't push the note, and delete the old one if exists.
if ( ! isset(
self::$loan_info['details']['currency'],
self::$loan_info['details']['advance_amount'],
self::$loan_info['details']['advance_paid_out_at']
)
|| ! is_numeric( self::$loan_info['details']['advance_amount'] )
|| empty( self::$loan_info['details']['currency'] )
) {
// There's something wrong with the loan information, delete the existing note, just in case of wrong information.
return false;
}
self::$loan_info['details']['currency'] = strtoupper( self::$loan_info['details']['currency'] );
return true;
}
/**
* Checks the saved paid out date on the previous note and deletes it if it doesn't match, to create a new one.
*
* @return bool
*/
private static function check_attached_loan_data_is_different() {
$data_store = WC_Data_Store::load( 'admin-note' );
$note_ids = $data_store->get_notes_with_name( self::NOTE_NAME );
if ( ! empty( $note_ids ) ) {
$note = Notes::get_note( $note_ids[0] );
if ( $note instanceof Note ) {
$content_data = (array) $note->get_content_data();
if ( isset( $content_data['advance_paid_out_at'], $content_data['advance_amount'] ) ) {
if ( self::$loan_info['details']['advance_paid_out_at'] === $content_data['advance_paid_out_at'] &&
self::$loan_info['details']['advance_amount'] === $content_data['advance_amount'] ) {
// Note already exists for the current loan. No action will be taken.
return false;
}
}
// The note isn't for the current loan. Delete it to create a new one.
$data_store->delete( $note );
}
}
return true;
}
/**
* Sets the loan information on the class.
*
* @param array $loan_info loan information.
*/
public static function set_loan_details( array $loan_info ) {
self::$loan_info = $loan_info;
}
}