369 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			369 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Refund Details Sections
 | |
|  *
 | |
|  * @package    EDD
 | |
|  * @subpackage Admin/Orders
 | |
|  * @copyright  Copyright (c) 2021, Sandhills Development, LLC
 | |
|  * @license    http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since      3.0
 | |
|  */
 | |
| 
 | |
| use EDD\Orders\Order;
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /** Header ******************************************************************/
 | |
| 
 | |
| /**
 | |
|  * Outputs Refund header region/notice of Refund vs. Order.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param Order $refund Current Refund.
 | |
|  */
 | |
| function edd_refund_details_notice( $refund ) {
 | |
| 	$order_url = edd_get_admin_url(
 | |
| 		array(
 | |
| 			'id'   => absint( $refund->parent ),
 | |
| 			'page' => 'edd-payment-history',
 | |
| 			'view' => 'view-order-details',
 | |
| 		)
 | |
| 	);
 | |
| ?>
 | |
| 
 | |
| <div class="edit-post-editor-regions__header">
 | |
| 	<div class="edit-post-header notice-warning" style="border-left-width: 4px; border-left-style: solid;">
 | |
| 
 | |
| 		<div class="edit-post-header__settings">
 | |
| 			<a href="<?php echo esc_url( $order_url ); ?>" class="button button-secondary" autofocus>
 | |
| 				<?php esc_html_e( 'View Original Order', 'easy-digital-downloads' ); ?>
 | |
| 			</a>
 | |
| 		</div>
 | |
| 
 | |
| 		<div class="edit-post-header__toolbar">
 | |
| 			<span alt="f223" class="edd-help-tip dashicons dashicons-editor-help" title="<?php _e( 'A refund is a read-only record to help balance your store's books.', 'easy-digital-downloads' ); ?>"></span> 
 | |
| 			<?php esc_html_e( 'You are viewing a refund record.', 'easy-digital-downloads' ); ?>
 | |
| 		</div>
 | |
| 
 | |
| 	</div>
 | |
| </div>
 | |
| 
 | |
| <?php
 | |
| }
 | |
| 
 | |
| /** Main **********************************************************************/
 | |
| 
 | |
| /**
 | |
|  * Outputs the Refund Items box.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param Order $refund Current Refund.
 | |
|  */
 | |
| function edd_refund_details_items( $refund ) {
 | |
| 	$_items       = array();
 | |
| 	$_adjustments = array();
 | |
| 
 | |
| 	$items  = edd_get_order_items( array(
 | |
| 		'order_id' => $refund->id,
 | |
| 		'number'   => 999,
 | |
| 	) );
 | |
| 
 | |
| 	foreach ( $items as $item ) {
 | |
| 		$item_adjustments = array();
 | |
| 
 | |
| 		$adjustments = edd_get_order_adjustments( array(
 | |
| 			'object_id'   => $item->id,
 | |
| 			'number'      => 999,
 | |
| 			'object_type' => 'order_item',
 | |
| 			'type'        => array(
 | |
| 				'discount',
 | |
| 				'credit',
 | |
| 				'fee',
 | |
| 			),
 | |
| 		) );
 | |
| 
 | |
| 		foreach ( $adjustments as $adjustment ) {
 | |
| 			// @todo edd_get_order_adjustment_to_json()?
 | |
| 			$adjustment_args = array(
 | |
| 				'id'           => esc_html( $adjustment->id ),
 | |
| 				'objectId'     => esc_html( $adjustment->object_id ),
 | |
| 				'objectType'   => esc_html( $adjustment->object_type ),
 | |
| 				'typeId'       => esc_html( $adjustment->type_id ),
 | |
| 				'type'         => esc_html( $adjustment->type ),
 | |
| 				'description'  => esc_html( $adjustment->description ),
 | |
| 				'subtotal'     => esc_html( $adjustment->subtotal ),
 | |
| 				'tax'          => esc_html( $adjustment->tax ),
 | |
| 				'total'        => esc_html( $adjustment->total ),
 | |
| 				'dateCreated'  => esc_html( $adjustment->date_created ),
 | |
| 				'dateModified' => esc_html( $adjustment->date_modified ),
 | |
| 				'uuid'         => esc_html( $adjustment->uuid ),
 | |
| 			);
 | |
| 
 | |
| 			$item_adjustments[] = $adjustment_args;
 | |
| 			$_adjustments[]     = $adjustment_args;
 | |
| 		}
 | |
| 
 | |
| 		// @todo edd_get_order_item_to_json()?
 | |
| 		$_items[] = array(
 | |
| 			'id'           => esc_html( $item->id ),
 | |
| 			'orderId'      => esc_html( $item->order_id ),
 | |
| 			'productId'    => esc_html( $item->product_id ),
 | |
| 			'productName'  => esc_html( $item->get_order_item_name() ),
 | |
| 			'priceId'      => esc_html( $item->price_id ),
 | |
| 			'cartIndex'    => esc_html( $item->cart_index ),
 | |
| 			'type'         => esc_html( $item->type ),
 | |
| 			'status'       => esc_html( $item->status ),
 | |
| 			'quantity'     => esc_html( $item->quantity ),
 | |
| 			'amount'       => esc_html( $item->amount ),
 | |
| 			'subtotal'     => esc_html( $item->subtotal ),
 | |
| 			'discount'     => esc_html( $item->discount ),
 | |
| 			'tax'          => esc_html( $item->tax ),
 | |
| 			'total'        => esc_html( $item->total ),
 | |
| 			'dateCreated'  => esc_html( $item->date_created ),
 | |
| 			'dateModified' => esc_html( $item->date_modified ),
 | |
| 			'uuid'         => esc_html( $item->uuid ),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	$adjustments  = edd_get_order_adjustments( array(
 | |
| 		'object_id'   => $refund->id,
 | |
| 		'number'      => 999,
 | |
| 		'object_type' => 'order',
 | |
| 		'type'        => array(
 | |
| 			'discount',
 | |
| 			'credit',
 | |
| 			'fee',
 | |
| 		),
 | |
| 	) );
 | |
| 
 | |
| 	foreach ( $adjustments as $adjustment ) {
 | |
| 		// @todo edd_get_order_adjustment_to_json()?
 | |
| 		$_adjustments[] = array(
 | |
| 			'id'           => esc_html( $adjustment->id ),
 | |
| 			'objectId'     => esc_html( $adjustment->object_id ),
 | |
| 			'objectType'   => esc_html( $adjustment->object_type ),
 | |
| 			'typeId'       => esc_html( $adjustment->type_id ),
 | |
| 			'type'         => esc_html( $adjustment->type ),
 | |
| 			'description'  => esc_html( $adjustment->description ),
 | |
| 			'subtotal'     => esc_html( $adjustment->subtotal ),
 | |
| 			'tax'          => esc_html( $adjustment->tax ),
 | |
| 			'total'        => esc_html( $adjustment->total ),
 | |
| 			'dateCreated'  => esc_html( $adjustment->date_created ),
 | |
| 			'dateModified' => esc_html( $adjustment->date_modified ),
 | |
| 			'uuid'         => esc_html( $adjustment->uuid ),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	$has_tax  = 'none';
 | |
| 	$tax_rate = $refund->id ? $refund->get_tax_rate() : false;
 | |
| 	$location = array(
 | |
| 		'rate'    => $tax_rate,
 | |
| 		'country' => '',
 | |
| 		'region'  => '',
 | |
| 	);
 | |
| 	if ( $tax_rate ) {
 | |
| 		$has_tax         = $location;
 | |
| 		$has_tax['rate'] = $tax_rate;
 | |
| 		if ( $refund->tax_rate_id ) {
 | |
| 			$tax_rate_object = $refund->get_tax_rate_object();
 | |
| 			if ( $tax_rate_object ) {
 | |
| 				$has_tax['country'] = $tax_rate_object->name;
 | |
| 				$has_tax['region']  = $tax_rate_object->description;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	wp_localize_script(
 | |
| 		'edd-admin-orders',
 | |
| 		'eddAdminOrderOverview',
 | |
| 		array(
 | |
| 			'items'        => $_items,
 | |
| 			'adjustments'  => $_adjustments,
 | |
| 			'refunds'      => array(),
 | |
| 			'isAdding'     => false,
 | |
| 			'isRefund'     => true,
 | |
| 			'hasQuantity'  => true,
 | |
| 			'hasTax'       => $has_tax,
 | |
| 			'order'        => array(
 | |
| 				'currency'       => $refund->currency,
 | |
| 				'currencySymbol' => html_entity_decode( edd_currency_symbol( $refund->currency ) ),
 | |
| 				'subtotal'       => $refund->subtotal,
 | |
| 				'discount'       => $refund->discount,
 | |
| 				'tax'            => $refund->tax,
 | |
| 				'total'          => $refund->total,
 | |
| 			),
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| 	$templates = array(
 | |
| 		'no-items',
 | |
| 		'subtotal',
 | |
| 		'tax',
 | |
| 		'total',
 | |
| 		'item',
 | |
| 		'adjustment',
 | |
| 		'adjustment-discount',
 | |
| 	);
 | |
| 
 | |
| 	foreach ( $templates as $tmpl ) {
 | |
| 		echo '<script type="text/html" id="tmpl-edd-admin-order-' . esc_attr( $tmpl ) . '">';
 | |
| 		require_once EDD_PLUGIN_DIR . 'includes/admin/views/tmpl-order-' . $tmpl . '.php';
 | |
| 		echo '</script>';
 | |
| 	}
 | |
| ?>
 | |
| 
 | |
| <div id="edd-order-overview" class="postbox edd-edit-purchase-element edd-order-overview">
 | |
| 	<table id="edd-order-overview-summary" class="widefat wp-list-table edd-order-overview-summary edd-order-overview-summary--refund">
 | |
| 		<thead>
 | |
| 			<tr>
 | |
| 				<th class="column-name column-primary"><?php echo esc_html( edd_get_label_singular() ); ?></th>
 | |
| 				<th class="column-amount"><?php esc_html_e( 'Unit Price', 'easy-digital-downloads' ); ?></th>
 | |
| 				<th class="column-quantity"><?php esc_html_e( 'Quantity', 'easy-digital-downloads' ); ?></th>
 | |
| 				<th class="column-subtotal column-right"><?php esc_html_e( 'Amount', 'easy-digital-downloads' ); ?></th>
 | |
| 			</tr>
 | |
| 		</thead>
 | |
| 	</table>
 | |
| </div>
 | |
| 
 | |
| <?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs Refund Notes box.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param Order $refund Current Refund.
 | |
|  */
 | |
| function edd_refund_details_notes( $refund ) {
 | |
| ?>
 | |
| 
 | |
| <div id="edd-order-items" class="postbox edd-edit-purchase-element">
 | |
| 	<h2 class="hndle">
 | |
| 		<?php esc_html_e( 'Refund Notes', 'easy-digital-downloads' ); ?>
 | |
| 	</h2>
 | |
| 
 | |
| 	<div class="inside">
 | |
| 		<?php edd_order_details_notes( $refund ); ?>
 | |
| 	</div>
 | |
| </div>
 | |
| 
 | |
| <?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs "Refund Details" box.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param Order $refund Current Refund.
 | |
|  */
 | |
| function edd_refund_details_attributes( $refund ) {
 | |
| 	$refund_date = edd_get_edd_timezone_equivalent_date_from_utc( EDD()->utils->date( $refund->date_created, 'utc', true ) );
 | |
| 
 | |
| 	$trash_url = wp_nonce_url(
 | |
| 		edd_get_admin_url( array(
 | |
| 			'edd-action'  => 'trash_order',
 | |
| 			'purchase_id' => absint( $refund->id ),
 | |
| 			'order_type'  => 'refund',
 | |
| 			'page'        => 'edd-payment-history',
 | |
| 		) ),
 | |
| 		'edd_payment_nonce'
 | |
| 	);
 | |
| 
 | |
| 	$order_url = edd_get_admin_url(
 | |
| 		array(
 | |
| 			'id'   => absint( $refund->parent ),
 | |
| 			'page' => 'edd-payment-history',
 | |
| 			'view' => 'view-order-details',
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| 	$order = edd_get_order( $refund->parent );
 | |
| ?>
 | |
| 
 | |
| <div class="postbox">
 | |
| 	<h2 class="hndle">
 | |
| 		<?php esc_html_e( 'Refund Attributes', 'easy-digital-downloads' ); ?>
 | |
| 	</h2>
 | |
| 
 | |
| 	<div class="edd-admin-box-inside">
 | |
| 		<time datetime="<?php echo esc_attr( EDD()->utils->date( $refund->date_created, null, true )->toDateTimeString() ); ?>" style="line-height: normal">
 | |
| 			<?php echo edd_date_i18n( $refund->date_created, 'M. d, Y' ) . '<br />' . edd_date_i18n( strtotime( $refund->date_created ), 'H:i' ); ?> <?php echo esc_html( edd_get_timezone_abbr() ); ?>
 | |
| 		</time>
 | |
| 
 | |
| 		<br /><br />
 | |
| 
 | |
| 		<a href="<?php echo esc_url( $trash_url ); ?>" class="edd-delete-payment edd-delete">
 | |
| 			<?php esc_html_e( 'Move to Trash', 'easy-digital-downloads' ); ?>
 | |
| 		</a>
 | |
| 	</div>
 | |
| 
 | |
| 	<div class="edd-admin-box-inside edd-admin-box-inside--row">
 | |
| 		<div class="edd-form-group">
 | |
| 			<span class="edd-form-group__label">
 | |
| 				<?php esc_html_e( 'Original Order', 'easy-digital-downloads' ); ?>
 | |
| 			</span>
 | |
| 			<div class="edd-form-group__control">
 | |
| 				<a href="<?php echo esc_url( $order_url ); ?>"><?php echo esc_html( $order->number ); ?></a>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 	</div>
 | |
| </div>
 | |
| 
 | |
| <?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs related Refunds.
 | |
|  *
 | |
|  * @since 3.0
 | |
|  *
 | |
|  * @param Order $refund
 | |
|  */
 | |
| function edd_refund_details_related_refunds( $refund ) {
 | |
| 	$refunds = array_filter(
 | |
| 		edd_get_order_refunds( $refund->parent ),
 | |
| 		function( $related_refund ) use ( $refund ) {
 | |
| 			return $related_refund->id !== $refund->id;
 | |
| 		}
 | |
| 	);
 | |
| 
 | |
| 	if ( empty( $refunds ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| ?>
 | |
| 
 | |
| <div class="postbox edd-order-data">
 | |
| 	<h2 class="hndle">
 | |
| 		<?php esc_html_e( 'Related Refunds', 'easy-digital-downloads' ); ?>
 | |
| 	</h2>
 | |
| 
 | |
| 	<?php
 | |
| 	foreach( $refunds as $refund ) :
 | |
| 		$refund_url = edd_get_admin_url( array(
 | |
| 			'page' => 'edd-payment-history',
 | |
| 			'view' => 'view-refund-details',
 | |
| 			'id'   => absint( $refund->id ),
 | |
| 		) );
 | |
| 	?>
 | |
| 		<div class="edd-admin-box-inside">
 | |
| 			<div class="edd-form-group">
 | |
| 				<a href="<?php echo esc_url( $refund_url ); ?>" class="edd-form-group__label">
 | |
| 					<?php echo esc_html( $refund->number ); ?>
 | |
| 				</a>
 | |
| 				<div class="edd-form-group__control">
 | |
| 					<time datetime="<?php echo esc_attr( EDD()->utils->date( $refund->date_created, null, true )->toDateTimeString() ); ?>" style="line-height: normal">
 | |
| 						<?php echo edd_date_i18n( $refund->date_created, 'M. d, Y' ) . '<br />' . edd_date_i18n( strtotime( $refund->date_created ), 'H:i' ); ?> <?php echo esc_html( edd_get_timezone_abbr() ); ?>
 | |
| 					</time>
 | |
| 				</div>
 | |
| 		</div>
 | |
| 	<?php endforeach; ?>
 | |
| </div>
 | |
| 
 | |
| <?php
 | |
| }
 |