[Back] <?php
/*
* Copyright (c) 2024 LatePoint LLC. All rights reserved.
*/
class OsTransactionIntentHelper {
public static function generate_continue_intent_url( $transaction_intent_key ) {
return OsRouterHelper::build_admin_post_link( [
'orders',
'continue_transaction_intent'
], [ 'transaction_intent_key' => $transaction_intent_key ] );
}
public static function get_order_id_from_intent_key( $intent_key ) {
if ( empty( $intent_key ) ) {
return false;
}
$transaction_intent = new OsTransactionIntentModel();
$transaction_intent = $transaction_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
if ( $transaction_intent && $transaction_intent->order_id ) {
return $transaction_intent->order_id;
} else {
return null;
}
}
public static function get_transaction_intent_by_intent_key( string $intent_key ): OsTransactionIntentModel {
$transaction_intent = new OsTransactionIntentModel();
if ( empty( $intent_key ) ) {
return $transaction_intent;
}
$transaction_intent = $transaction_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
if ( ! empty( $transaction_intent ) ) {
return $transaction_intent;
} else {
return new OsTransactionIntentModel();
}
}
public static function is_converted( $transaction_intent_id ) {
$transaction_intent = new OsTransactionIntentModel( $transaction_intent_id );
if ( ! empty( $transaction_intent->transaction_id ) ) {
return $transaction_intent->transaction_id;
} else {
return false;
}
}
public static function create_or_update_transaction_intent( OsInvoiceModel $invoice, array $payment_params ): OsTransactionIntentModel {
$transaction_intent = new OsTransactionIntentModel();
$transaction_intent = $transaction_intent->where( [ 'status' => LATEPOINT_TRANSACTION_INTENT_STATUS_NEW, 'invoice_id' => $invoice->id ] )->set_limit( 1 )->get_results_as_models();
if ( empty( $transaction_intent ) ) {
$transaction_intent = new OsTransactionIntentModel();
}
$transaction_intent->charge_amount = $invoice->charge_amount;
$transaction_intent->invoice_id = $invoice->id;
$order = $invoice->get_order();
$transaction_intent->order_id = $order->id;
$transaction_intent->customer_id = $order->customer_id;
$transaction_intent->set_payment_data_value( 'time', LATEPOINT_PAYMENT_TIME_NOW, false );
$transaction_intent->set_payment_data_value( 'portion', sanitize_text_field( $payment_params['payment_portion'] ), false );
$transaction_intent->set_payment_data_value( 'method', sanitize_text_field( $payment_params['payment_method'] ), false );
$transaction_intent->set_payment_data_value( 'processor', sanitize_text_field( $payment_params['payment_processor'] ), false );
$transaction_intent->calculate_specs_charge_amount();
$transaction_intent->generate_intent_key();
if ( ! $transaction_intent->save() ) {
throw new Exception( __( 'Unable to save transaction intent', 'latepoint' ) );
}
return $transaction_intent;
}
}