<?php
/**
* CRM Invoice to CRM Contact Transformer class.
*
* @package automattic/jetpack-crm
*/
namespace Automattic\Jetpack\CRM\Automation\Data_Transformers;
use Automattic\Jetpack\CRM\Automation\Data_Transformer_Exception;
use Automattic\Jetpack\CRM\Automation\Data_Types\Contact_Data;
use Automattic\Jetpack\CRM\Automation\Data_Types\Data_Type;
use Automattic\Jetpack\CRM\Automation\Data_Types\Invoice_Data;
use Automattic\Jetpack\CRM\Entities\Factories\Contact_Factory;
/**
* CRM Invoice to CRM Contact Transformer class.
*
* @since 6.2.0
*/
class Data_Transformer_Invoice_To_Contact extends Data_Transformer_Base {
/**
* {@inheritDoc}
*/
public static function get_slug(): string {
return 'invoice_to_contact';
}
/**
* {@inheritDoc}
*/
public static function get_from(): string {
return Invoice_Data::class;
}
/**
* {@inheritDoc}
*/
public static function get_to(): string {
return Contact_Data::class;
}
/**
* Transform invoice entity to a contact.
*
* @since 6.2.0
*
* @param Data_Type $data The invoice data type we want to transform.
* @return Data_Type Return the Data_Type_Contact of the invoice owner.
*
* @throws Data_Transformer_Exception If the invoice is not linked to a contact.
*/
public function transform( Data_Type $data ): Data_Type {
global $zbs;
$this->validate_from_type( $data );
/* @todo We should really be using getInvoiceContact() but it's broken. */
$contact_id = $zbs->DAL->invoices->getInvoiceContactID( $data->get_id() ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$contact_data = $zbs->DAL->contacts->getContact( $contact_id ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
if ( ! $contact_data ) {
throw new Data_Transformer_Exception(
'Invoice is not linked to a contact.',
Data_Transformer_Exception::MISSING_LINK
);
}
$contact = Contact_Factory::create( $contact_data );
return ( new Contact_Data( $contact ) );
}
}