public function addOrderItem($args)
 {
     //Remove Api Key
     array_shift($args);
     list($invoiceId, $productId, $type, $price, $quantity, $description, $notes) = $args;
     $invoice = new Infusionsoft_Invoice($invoiceId);
     $product = new Infusionsoft_Product($productId);
     $orderItem = new Infusionsoft_OrderItem();
     $orderItem->CPU = $product->ProductPrice;
     $orderItem->PPU = $price;
     $orderItem->Qty = $quantity;
     $orderItem->ItemDescription = $description;
     $orderItem->Notes = $notes;
     $orderItem->ProductId = $productId;
     $orderItem->ItemType = $type;
     $orderItem->OrderId = $invoice->JobId;
     $app = Infusionsoft_AppPool::getApp('');
     $orderItem->Id = $app->data->add(array($orderItem->getTable(), $orderItem->toArray()));
     Infusionsoft_SdkEventManager::dispatch(new Infusionsoft_SdkEvent($orderItem, array('result' => $orderItem)), 'DataObject.Saved');
     $total = $orderItem->PPU * $orderItem->Qty;
     $invoiceItem = new Infusionsoft_InvoiceItem();
     $invoiceItem->OrderItemId = $orderItem->Id;
     $invoiceItem->InvoiceId = $invoice->Id;
     $invoiceItem->InvoiceAmt = $total;
     $invoiceItem->save();
     $invoice->InvoiceTotal = floatval($invoice->InvoiceTotal) + $total;
     $invoice->TotalDue = floatval($invoice->TotalDue) + $total;
     $invoice->save();
     return true;
 }
 public function delete($app = null)
 {
     if ($this->Id > 0) {
         $result = Infusionsoft_DataService::delete($this, $this->Id, $app);
         Infusionsoft_SdkEventManager::dispatch(new Infusionsoft_SdkEvent($this, array('result' => $result)), 'DataObject.Deleted');
     } else {
         throw new Infusionsoft_Exception("Trying to delete a blank contact");
     }
     return $result;
 }
<?php

include '../infusionsoft.php';
include 'object_editor_all_tables.php';
include '../tests/testUtils.php';
Infusionsoft_SdkEventManager::attach('loaded', "DataObject.Loaded");
Infusionsoft_SdkEventManager::attach('deleted', "DataObject.Deleted");
Infusionsoft_SdkEventManager::attach('saved', "DataObject.Saved");
Infusionsoft_SdkEventManager::attach('saved2', "DataObject.Saved");
$contact = new Infusionsoft_Contact();
$contact->FirstName = 'TEST';
$contact->save();
$contact2 = new Infusionsoft_Contact($contact->Id);
$contact2->delete();
function loaded($event)
{
    echo 'Loaded!<br/>';
}
function deleted(Infusionsoft_SdkEvent $event)
{
    echo 'Deleted!<br/>';
}
function saved(Infusionsoft_SdkEvent $event)
{
    echo 'Saved!<br/>';
}
function saved2(Infusionsoft_SdkEvent $event)
{
    echo 'Saved2!<br/>';
}