You'd need s 3rd party extension or custom coding to generate the PDF. You can probably execute the 3rd party extensions API or your custom coding in CB Auto Actions using a Code action. Probably the best trigger for that is onCPayAfterPaymentStatusUpdateEvent since it's fired when payment status of a basket changes (e.g. when it's paid). The emailing can be handled by any of our usages that support attachments as long as the PDF is in an accessible location.
Code:
/**
* Handles changes of payment basket $paymentBasket payment statuses events
* This function may be called more than one time for events different than the Completed or Processed state if there are multiple notifications
*
* $unifiedStatus status mappings with e.g. Paypal status:
* CB Unified status Paypal status
* Completed <-- Completed
* Processed <-- Processed, Canceled_Reversal
* Denied <-- Denied, Expired, Failed, Voided
* Refunded <-- Reversed, Refunded, Partially-Refunded
* Pending <-- Pending, In-Progress
* RegistrationCancelled <-- A new cb registration got cancelled by user (e.g. paypal cancel payment button)
*
* @param UserTable $user User paying
* @param cbpaidPaymentBasket $paymentBasket CBPaid Payment basket being paid (corresponding to PayPal variable names)
* @param cbpaidUsersubscriptionRecord[] $subscriptions CBPay Subscriptions being paid
* @param string $unifiedStatus new unified status: see above
* @param string $previousUnifiedStatus previous unified status: see above
* @param string $eventType type of event (paypal type): 'web_accept', 'subscr_payment', 'subscr_signup', 'subscr_modify', 'subscr_eot', 'subscr_cancel', 'subscr_failed'
* @param cbpaidPaymentNotification $notification notification object of the payment
* @return void
*/
public function onCPayAfterPaymentStatusUpdateEvent( $user, $paymentBasket, $subscriptions, $unifiedStatus, $previousUnifiedStatus, $eventType, $notification )
You'll want to make sure $unifiedStatus ([var4]) is Completed or Processed in your action.