Exemplo n.º 1
0
<?php

require_once '../../QuickBooks.php';
$arr = array('Name' => 'Sales', 'Descrip' => 'Test');
$path_or_tablefield = 'account.Descrip';
$mode = QUICKBOOKS_SQL_SCHEMA_MAP_TO_XML;
$map = array();
$others = array();
QuickBooks_SQL_Schema::mapToSchema($path_or_tablefield, $mode, $map, $others);
print "\n\n";
print_r($map);
$path_or_tablefield = 'account.SomethingElse';
$mode = QUICKBOOKS_SQL_SCHEMA_MAP_TO_XML;
$map = array();
$others = array();
QuickBooks_SQL_Schema::mapToSchema($path_or_tablefield, $mode, $map, $others);
print "\n\n";
print_r($map);
$path_or_tablefield = 'account.Parent_ListID';
$mode = QUICKBOOKS_SQL_SCHEMA_MAP_TO_XML;
$map = array();
$others = array();
QuickBooks_SQL_Schema::mapToSchema($path_or_tablefield, $mode, $map, $others);
print "\n\n";
print_r($map);
print "\n\n";
Exemplo n.º 2
0
 protected function _initialize($init_options = array())
 {
     $defaults = array('quickbooks_sql_enabled' => false, 'quickbooks_sql_schema' => realpath(dirname(__FILE__) . '/../../data/schema'), 'quickbooks_sql_debug' => false, 'quickbooks_sql_droptable' => false, 'quickbooks_sql_prefix' => QUICKBOOKS_DRIVER_SQL_PREFIX_SQL, 'quickbooks_sql_print' => false, 'quickbooks_integrator_enabled' => false, 'quickbooks_integrator_prefix' => QUICKBOOKS_DRIVER_SQL_PREFIX_INTEGRATOR);
     $config = array_merge($defaults, $init_options);
     // list of SQL statements to run
     $arr_sql = array();
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_LOGTABLE);
     $def = array('quickbooks_log_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'quickbooks_ticket_id' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 'null'), 'batch' => array(QUICKBOOKS_DRIVER_SQL_INTEGER), 'msg' => array(QUICKBOOKS_DRIVER_SQL_TEXT), 'log_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME));
     $primary = 'quickbooks_log_id';
     $keys = array('quickbooks_ticket_id', 'batch');
     $uniques = array();
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_QUEUETABLE);
     $def = array('quickbooks_queue_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'quickbooks_ticket_id' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 'null'), 'qb_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'qb_action' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 32), 'ident' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'extra' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null'), 'qbxml' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null'), 'priority' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, 3, 0), 'qb_status' => array(QUICKBOOKS_DRIVER_SQL_CHAR, 1), 'msg' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null'), 'enqueue_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME), 'dequeue_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null'));
     $primary = 'quickbooks_queue_id';
     $keys = array('quickbooks_ticket_id', 'priority', array('qb_username', 'qb_action', 'ident', 'qb_status'), 'qb_status');
     $uniques = array();
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_RECURTABLE);
     $def = array('quickbooks_recur_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'qb_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'qb_action' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 32), 'ident' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'extra' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null'), 'qbxml' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null'), 'priority' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, 3, 0), 'run_every' => array(QUICKBOOKS_DRIVER_SQL_INTEGER), 'recur_lasttime' => array(QUICKBOOKS_DRIVER_SQL_INTEGER), 'enqueue_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME));
     $primary = 'quickbooks_recur_id';
     $keys = array(array('qb_username', 'qb_action', 'ident'), 'priority');
     $uniques = array();
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_TICKETTABLE);
     $def = array('quickbooks_ticket_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'qb_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'ticket' => array(QUICKBOOKS_DRIVER_SQL_CHAR, 36), 'processed' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 0), 'lasterror_num' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 32, 'null'), 'lasterror_msg' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'ipaddr' => array(QUICKBOOKS_DRIVER_SQL_CHAR, 15), 'write_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME), 'touch_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME));
     $primary = 'quickbooks_ticket_id';
     $keys = array('ticket');
     $uniques = array();
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_USERTABLE);
     $def = array('qb_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'qb_password' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255), 'qb_company_file' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'qbwc_wait_before_next_update' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 0), 'qbwc_min_run_every_n_seconds' => array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 0), 'status' => array(QUICKBOOKS_DRIVER_SQL_CHAR, 1), 'write_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME), 'touch_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME));
     $primary = 'qb_username';
     $keys = array();
     $uniques = array();
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     /*
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_IDENTTABLE);
     $def = array(
     	'quickbooks_ident_id' => array( QUICKBOOKS_DRIVER_SQL_SERIAL ),
     	'qb_username' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'qb_object' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'unique_id' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'qb_ident' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ),
     	'editsequence' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ),  
     	'extra' => array( QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null' ), 
     	'map_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	);
     $primary = 'quickbooks_ident_id';
     $keys = array(  );
     $uniques = array( array( 'qb_username', 'qb_object', 'unique_id' ) );
     
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     */
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_CONFIGTABLE);
     $def = array('quickbooks_config_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'qb_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'module' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'cfgkey' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'cfgval' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'cfgtype' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40), 'cfgopts' => array(QUICKBOOKS_DRIVER_SQL_TEXT, null), 'write_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME), 'mod_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME));
     $primary = 'quickbooks_config_id';
     $keys = array();
     $uniques = array(array('qb_username', 'module', 'cfgkey'));
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     /*
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_NOTIFYTABLE);
     $def = array(
     	'quickbooks_notify_id' => array( QUICKBOOKS_DRIVER_SQL_SERIAL ),
     	'qb_username' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'qb_object' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'unique_id' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'qb_ident' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'errnum' => array( QUICKBOOKS_DRIVER_SQL_INTEGER, null, 'null' ), 
     	'errmsg' => array( QUICKBOOKS_DRIVER_SQL_TEXT, null ), 
     	'note' => array( QUICKBOOKS_DRIVER_SQL_TEXT, null ), 
     	'priority' => array( QUICKBOOKS_DRIVER_SQL_INTEGER ), 
     	'write_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	'mod_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	);
     $primary = 'quickbooks_notify_id';
     $keys = array(  );
     $uniques = array(  );
     
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     */
     /*
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_CONNECTIONTABLE);
     $def = array(
     	'quickbooks_connection_id' => array( QUICKBOOKS_DRIVER_SQL_SERIAL ), 
     	'qb_username' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40 ), 
     	'certificate' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null' ), 
     	'application_id' => array( QUICKBOOKS_DRIVER_SQL_INTEGER ), 
     	'application_login' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 40, 'null' ), 
     	'lasterror_num' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 32, 'null' ), 
     	'lasterror_msg' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null' ), 
     	'connection_ticket' => array( QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null' ), 
     	'connection_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	'write_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	'touch_datetime' => array( QUICKBOOKS_DRIVER_SQL_DATETIME ), 
     	);
     $primary = 'quickbooks_connection_id';
     $keys = array(  );
     $uniques = array(  );
     
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     */
     $table = $this->_mapTableName(QUICKBOOKS_DRIVER_SQL_OAUTHTABLE);
     $def = array('quickbooks_oauth_id' => array(QUICKBOOKS_DRIVER_SQL_SERIAL), 'app_username' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255), 'app_tenant' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255), 'oauth_request_token' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'oauth_request_token_secret' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'oauth_access_token' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'oauth_access_token_secret' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null'), 'qb_realm' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 32, 'null'), 'qb_flavor' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 12, 'null'), 'qb_user' => array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 64, 'null'), 'request_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME), 'access_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null'), 'touch_datetime' => array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null'));
     $primary = 'quickbooks_oauth_id';
     $keys = array();
     $uniques = array(array('app_username', 'app_tenant'));
     $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($table, $def, $primary, $keys, $uniques));
     //header('Content-Type: text/plain');
     //print_r($arr_sql);
     //exit;
     // Support for mirroring the QuickBooks database in an SQL database
     if ($config['quickbooks_sql_enabled']) {
         $tables = array();
         // Use the QuickBooks_SQL_Schema class
         $dh = opendir($defaults['quickbooks_sql_schema']);
         while (false !== ($file = readdir($dh))) {
             if ($file[0] == '.' or is_dir($defaults['quickbooks_sql_schema'] . '/' . $file)) {
                 continue;
             }
             $xml = file_get_contents($defaults['quickbooks_sql_schema'] . '/' . $file);
             QuickBooks_SQL_Schema::mapSchemaToSQLDefinition($xml, $tables);
             // This times out on some SQL connections because it takes so darn long to generate the
             //	schema. Thus, we're going to issue a few useless queries here, just so we don't lose
             //	the connection to the database.
             $this->noop();
         }
         // A table has to be created for each query type, and each table has to have some extra fields added to it
         foreach ($tables as $table) {
             // @TODO Support other transformations (table names to uppercase, field names to lowercase, etc.)
             $name = strtolower($config['quickbooks_sql_prefix'] . $table[0]);
             $idfield = array(QUICKBOOKS_DRIVER_SQL_SERIAL, null, 0);
             $username_field = array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 'null');
             $external_field = array(QUICKBOOKS_DRIVER_SQL_INTEGER, null, 'null');
             $ifield = array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null');
             // Date/time when first inserted
             $ufield = array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null');
             // Date/time when updated (re-sync from QuickBooks)
             $mfield = array(QUICKBOOKS_DRIVER_SQL_TIMESTAMP, null, 'null');
             // Date/time when modified by a user (needs to be pushed to QB)
             $hfield = array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 40, 'null');
             $qfield = array(QUICKBOOKS_DRIVER_SQL_TEXT, null, 'null');
             //$dfield = array( QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null' );		// Date/time when deleted by a user (needs to be deleted from QB)
             //$cfield = array( QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_INSERT, null, 'NOW()' );
             //$mfield = array( QUICKBOOKS_DRIVER_SQL_TIMESTAMP_ON_INSERT_OR_UPDATE, null, 'NOW()' );
             // This should be an VARCHAR, QuickBooks errors are sometimes in the format "0x12341234"
             $enfield = array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 32, 'null');
             // Add/mod error number
             $emfield = array(QUICKBOOKS_DRIVER_SQL_VARCHAR, 255, 'null');
             // Add/mod error message
             $enqfield = array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null');
             // Add/mod enqueue date/time
             $deqfield = array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null');
             // Add/mod dequeue date/time
             $audit_modified_field = array(QUICKBOOKS_DRIVER_SQL_DATETIME, null, 'null');
             $audit_amount_field = array(QUICKBOOKS_DRIVER_SQL_DECIMAL, null, 'null');
             $to_delete_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             // Flag it for deletion
             $to_void_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             $to_skip_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             // Flag it for skipping
             $to_sync_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             $flag_deleted_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             // This has been deleted within QuickBooks
             $flag_voided_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             $flag_skipped_field = array(QUICKBOOKS_DRIVER_SQL_BOOLEAN, null, 0);
             // This has been skipped within the sync to QuickBooks
             $fields = $table[1];
             $prepend = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $idfield, QUICKBOOKS_DRIVER_SQL_FIELD_USERNAME_ID => $username_field, QUICKBOOKS_DRIVER_SQL_FIELD_EXTERNAL_ID => $external_field);
             $fields = array_merge($prepend, $fields);
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_DISCOVER] = $ifield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_RESYNC] = $ufield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY] = $mfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_HASH] = $hfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_QBXML] = $qfield;
             //$fields[QUICKBOOKS_DRIVER_SQL_FIELD_DELETE] = $dfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER] = $enfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE] = $emfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_ENQUEUE_TIME] = $enqfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_DEQUEUE_TIME] = $deqfield;
             //$fields[QUICKBOOKS_DRIVER_SQL_FIELD_DELETED_FLAG] = $delflagfield;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_AUDIT_AMOUNT] = $audit_amount_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_AUDIT_MODIFIED] = $audit_modified_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_TO_SYNC] = $to_sync_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_TO_DELETE] = $to_delete_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_TO_SKIP] = $to_skip_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_TO_VOID] = $to_void_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_FLAG_DELETED] = $flag_deleted_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_FLAG_SKIPPED] = $flag_skipped_field;
             $fields[QUICKBOOKS_DRIVER_SQL_FIELD_FLAG_VOIDED] = $flag_voided_field;
             $primary = QUICKBOOKS_DRIVER_SQL_FIELD_ID;
             //$keys = array();
             //$uniques = array( $table[2] );
             //$uniques = array();
             $keys = $table[3];
             $uniques = $table[4];
             // @TODO Fix this to support unique keys
             $keys = array_merge($keys, $uniques);
             /*
             print('keys: ');
             print_r($keys);
             print("\n\n");
             print('uniques: ');
             print_r($uniques);
             exit;
             */
             $arr_sql = array_merge($arr_sql, $this->_generateCreateTable($name, $fields, $primary, $keys));
         }
     }
     // Run each CREATE TABLE statement...
     foreach ($arr_sql as $sql) {
         if ($config['quickbooks_sql_debug'] or $config['quickbooks_sql_print']) {
             print $sql . "\n\n";
         } else {
             $errnum = 0;
             $errmsg = '';
             //print($sql);
             $this->_query($sql, $errnum, $errmsg);
         }
     }
     //exit;
 }
Exemplo n.º 3
0
 /**
  * @TODO Change this to return false by default, and only catch the specific errors we're concerned with.
  * 
  */
 public static function catchall($requestID, $user, $action, $ident, $extra, &$err, $xml, $errnum, $errmsg, $config)
 {
     $Driver = QuickBooks_Driver_Singleton::getInstance();
     /*
     $Parser = new QuickBooks_XML($xml);
     $errnumTemp = 0;
     $errmsgTemp = '';
     $Doc = $Parser->parse($errnumTemp, $errmsgTemp);
     $Root = $Doc->getRoot();		
     $emailStr = var_export($Root->children(), true);
     	
     $List = $Root->getChildAt('QBXML QBXMLMsgsRs '.QuickBooks_Utilities::actionToResponse($action));
     $Node = current($List->children());
     */
     $map = array();
     $others = array();
     QuickBooks_SQL_Schema::mapToSchema(trim(QuickBooks_Utilities::actionToXMLElement($action)), QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $map, $others);
     $sqlObject = new QuickBooks_SQL_Object($map[0], trim(QuickBooks_Utilities::actionToXMLElement($action)));
     $table = $sqlObject->table();
     switch ($errnum) {
         case 1:
             // These errors occur when we search for something and it doesn't exist
         // These errors occur when we search for something and it doesn't exist
         case 500:
             // 	i.e. we query for invoices modified since xyz, but there are none that have been modified since then
             // This isn't really an error, just ignore it
             return true;
         case 1000:
             // An internal error occured
             // @todo Hopefully at some point we'll have a better idea of how to handle this error...
             return true;
         case 3200:
             // Ignore EditSequence errors (the record will be picked up and a conflict reported next time it runs... maybe?)
             // @todo Think about this one more
             return true;
         case 3250:
             // This feature is not enabled or not available in this version of QuickBooks.
             // Do nothing (this can be safely ignored)
             return true;
         case 3100:
             // Name of List Element is already in use.
             $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
             $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER, $errnum);
             $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, $errmsg);
             $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $sqlObject, array($multipart));
             break;
         case 3260:
             // Insufficient permission level to perform this action.
             // There's nothing we can do about this, if they don't grant the user permission, just skip it
             return true;
         case 3200:
             // The provided edit sequence is out-of-date.
             if (!($tmp = $Driver->get(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident)))) {
                 return true;
             }
             switch ($config['conflicts']) {
                 case QUICKBOOKS_SERVER_SQL_CONFLICT_LOG:
                     $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
                     $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER, $errnum);
                     $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, $errmsg);
                     $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $sqlObject, array($multipart));
                     break;
                 case QUICKBOOKS_SERVER_SQL_CONFLICT_NEWER:
                     $Parser = new QuickBooks_XML_Parser($xml);
                     $errnumTemp = 0;
                     $errmsgTemp = '';
                     $Doc = $Parser->parse($errnumTemp, $errmsgTemp);
                     $Root = $Doc->getRoot();
                     $List = $Root->getChildAt('QBXML QBXMLMsgsRs ' . QuickBooks_Utilities::actionToResponse($action));
                     $TimeModified = $Root->getChildDataAt('QBXML QBXMLMsgsRs ' . QuickBooks_Utilities::actionToResponse($action) . ' ' . QuickBooks_Utilities::actionToXMLElement($action) . ' TimeModified');
                     $EditSequence = $Root->getChildDataAt('QBXML QBXMLMsgsRs ' . QuickBooks_Utilities::actionToResponse($action) . ' ' . QuickBooks_Utilities::actionToXMLElement($action) . ' EditSequence');
                     $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
                     if (QuickBooks_Utilities::compareQBTimeToSQLTime($TimeModified, $tmp->get(QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY)) >= 0 && $config['mode'] != QUICKBOOKS_SERVER_SQL_MODE_WRITEONLY) {
                         //@TODO: Make this get only a single item, not the whole table
                         $Driver->queueEnqueue($user, QuickBooks_Utilities::convertActionToQuery($action), __FILE__, true, QUICKBOOKS_SERVER_SQL_CONFLICT_QUEUE_PRIORITY, $extra);
                     } else {
                         if (QuickBooks_Utilities::compareQBTimeToSQLTime($TimeModified, $tmp->get(QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY)) < 0) {
                             //Updates the EditSequence without marking the row as resynced.
                             $tmpSQLObject = new QuickBooks_SQL_Object($table, null);
                             $tmpSQLObject->set("EditSequence", $EditSequence);
                             $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $tmpSQLObject, array($multipart));
                             $Driver->queueEnqueue($user, QuickBooks_Utilities::convertActionToMod($action), $tmp->get(QUICKBOOKS_DRIVER_SQL_FIELD_ID), true, QUICKBOOKS_SERVER_SQL_CONFLICT_QUEUE_PRIORITY, $extra);
                         } else {
                             //Trash it, set synced.
                             $tmpSQLObject = new QuickBooks_SQL_Object($table, null);
                             $tmpSQLObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, "Read/Write Mode is WRITEONLY, and Conflict Mode is NEWER, and Quickbooks has Newer data, so no Update Occured.");
                             $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $tmpSQLObject, array($multipart));
                         }
                     }
                     break;
                 case QUICKBOOKS_SERVER_SQL_CONFLICT_QUICKBOOKS:
                     if ($config['mode'] == QUICKBOOKS_SERVER_SQL_MODE_READWRITE) {
                         //@TODO: Make this get only a single item, not the whole table
                         $Driver->queueEnqueue($user, QuickBooks_Utilities::convertActionToQuery($action), null, true, QUICKBOOKS_SERVER_SQL_CONFLICT_QUEUE_PRIORITY, $extra);
                         $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
                         $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER, $errnum);
                         $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, $errmsg);
                         $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $sqlObject, array($multipart));
                         //Use what's on quickbooks, and trash whatever is here.
                     } else {
                         $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
                         $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER, $errnum);
                         $sqlObject->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, $errmsg);
                         $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $sqlObject, array($multipart));
                         // @TODO: Raise Notification that the conflicts level requires writing to SQL table, but Mode disallows this
                     }
                     break;
                 case QUICKBOOKS_SERVER_SQL_CONFLICT_SQL:
                     // Updates the EditSequence without marking the row as resynced.
                     $tmpSQLObject = new QuickBooks_SQL_Object($table, null);
                     $tmpSQLObject->set("EditSequence", $EditSequence);
                     $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $tmpSQLObject, array($multipart));
                     $Driver->queueEnqueue($user, QuickBooks_Utilities::convertActionToMod($action), $tmp->get(QUICKBOOKS_DRIVER_SQL_FIELD_ID), true, QUICKBOOKS_SERVER_SQL_CONFLICT_QUEUE_PRIORITY, $extra);
                     break;
                 case QUICKBOOKS_SERVER_SQL_CONFLICT_CALLBACK:
                     break;
                 default:
                     break;
             }
             break;
         default:
             if (strstr($xml, 'statusSeverity="Info"') === false) {
                 //
             }
             break;
     }
     // Please don't change this, it stops us from knowing what's actually
     //	going wrong. If an error occurs, we should either catch it if it's
     //	recoverable, or treated as a fatal error so we know about it and
     //	can address it later.
     //return false;
     return true;
 }
Exemplo n.º 4
0
 /** 
  * 
  * 
  * @TODO Clean this up!
  */
 protected static function _transformToSQLObjects($curpath, $Node, &$objects, $current = null, $extra = array())
 {
     if ($Node->childCount()) {
         //print('LOOKING AT [' . strtolower(trim(trim($curpath) . ', ' . $Node->name())) . ']' . "\n");
         //
         switch (strtolower(trim(trim($curpath) . ' ' . $Node->name()))) {
             case 'accountret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('AccountRet ListID');
                 }
                 if (empty($extra['FullName'])) {
                     $extra['FullName'] = $Node->getChildDataAt('AccountRet FullName');
                 }
                 $extra['EntityListID'] = $extra['ListID'];
                 $extra['EntityType'] = 'Account';
                 break;
             case 'billingrateret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('BillingRateRet ListID');
                 }
                 break;
             case 'billpaymentcheckret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('BillPaymentCheckRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'BillPaymentCheck';
                 //$extra['ExchangeRate'] = $Node->getChildDataAt('BillPaymentCheckRet ExchangeRate');
                 //$extra['AmountInHomeCurrency'] = $Node->getChildDataAt('BillPaymentCheckRet AmountInHomeCurrency');
                 break;
             case 'billpaymentcreditcardret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('BillPaymentCreditCardRet TxnID');
                 }
                 break;
             case 'billret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('BillRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Bill';
                 break;
             case 'billret itemgrouplineret':
                 if (!isset($extra['ListID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemGroupLineRet TxnLineID');
                 }
                 break;
             case 'chargeret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('ChargeRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Charge';
                 break;
             case 'checkret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('CheckRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Check';
                 break;
             case 'checkret itemgrouplineret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemGroupLineRet TxnLineID');
                 }
                 break;
             case 'companyret':
                 if (!isset($extra['CompanyName'])) {
                     $extra['CompanyName'] = $Node->getChildDataAt('CompanyRet CompanyName');
                 }
                 $extra['EntityListID'] = $extra['CompanyName'];
                 $extra['EntityType'] = 'Company';
                 break;
             case 'creditcardchargeret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('CreditCardChargeRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'CreditCardCharge';
                 break;
             case 'creditcardchargeret itemgrouplineret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemGroupLineRet TxnLineID');
                 }
                 break;
             case 'creditcardcreditret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('CreditCardCreditRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'CreditCardCredit';
                 break;
             case 'creditcardcreditret itemgrouplineret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemGroupLineRet TxnLineID');
                 }
                 break;
             case 'creditmemoret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('CreditMemoRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'CreditMemo';
                 break;
             case 'creditmemoret creditmemolinegroupret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('CreditMemoLineGroupRet TxnLineID');
                 }
                 break;
             case 'customerret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('CustomerRet ListID');
                 }
                 $extra['EntityType'] = 'Customer';
                 break;
             case 'dataextdefret':
                 if (!isset($extra['DataExtName'])) {
                     $extra['DataExtName'] = $Node->getChildDataAt('DataExtDefRet DataExtName');
                 }
                 if (!isset($extra['OwnerID'])) {
                     $extra['OwnerID'] = $Node->getChildDataAt('DataExtDefRet OwnerID');
                 }
                 break;
             case 'depositret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('DepositRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Deposit';
                 break;
             case 'employeeret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('EmployeeRet ListID');
                 }
                 $extra['EntityListID'] = $extra['ListID'];
                 $extra['EntityType'] = 'Employee';
                 break;
             case 'estimateret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('EstimateRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Estimate';
                 break;
             case 'estimateret estimatelineret':
                 if (!isset($extra['Txn_TxnID'])) {
                     $extra['Txn_TxnID'] = $Node->getChildDataAt('EstimateLineRet TxnLineID');
                 }
                 $extra['TxnType'] = 'EstimateLine';
                 break;
             case 'estimateret estimatelinegroupret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('EstimateLineGroupRet TxnLineID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnLineID'];
                 $extra['TxnType'] = 'EstimateLineGroup';
                 break;
             case 'estimateret estimatelinegroupret estimatelineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('EstimateLineRet TxnLineID');
                 $extra['TxnType'] = 'EstimateLineGroup_EstimateLine';
                 break;
             case 'inventoryadjustmentret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('InventoryAdjustmentRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'InventoryAdjustment';
                 break;
             case 'invoiceret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('InvoiceRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'Inventory';
                 break;
             case 'invoiceret invoicelineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('InvoiceLineRet TxnLineID');
                 $extra['TxnType'] = 'InvoiceLine';
                 break;
             case 'invoiceret invoicelinegroupret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('InvoiceLineGroupRet TxnLineID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnLineID'];
                 $extra['TxnType'] = 'InvoiceLineGroup';
                 break;
             case 'invoiceret invoicelinegroupret invoicelineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('InvoiceLineRet TxnLineID');
                 $extra['TxnType'] = 'InvoiceLineGroup_InvoiceLine';
                 break;
             case 'itemgroupret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('ItemGroupRet ListID');
                 }
                 $extra['EntityListID'] = $extra['ListID'];
                 $extra['EntityType'] = 'ItemGroup';
                 break;
             case 'iteminventoryret':
                 $extra['EntityListID'] = $Node->getChildDataAt('ItemInventoryRet ListID');
                 $extra['EntityType'] = 'ItemInventory';
                 break;
             case 'iteminventoryassemblyret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('ItemInventoryAssemblyRet ListID');
                 }
                 $extra['EntityListID'] = $extra['ListID'];
                 $extra['EntityType'] = 'ItemInventoryAssembly';
                 break;
             case 'itemnoninventoryret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemNonInventoryRet ListID');
                 }
                 $extra['EntityType'] = 'ItemNonInventory';
                 break;
             case 'itemdiscountret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemDiscountRet ListID');
                 }
                 $extra['EntityType'] = 'ItemDiscount';
                 break;
             case 'itemfixedassetret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemFixedAssetRet ListID');
                 }
                 $extra['EntityType'] = 'ItemFixedAsset';
                 break;
             case 'itemotherchargeret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemOtherChargeRet ListID');
                 }
                 $extra['EntityType'] = 'ItemOtherCharge';
                 break;
             case 'itempaymentret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemPaymentRet ListID');
                 }
                 $extra['EntityType'] = 'ItemPayment';
                 break;
             case 'itemreceiptret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('ItemReceiptRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'ItemReceipt';
                 break;
             case 'itemreceiptret itemreceiptlinegroupret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemReceiptLineGroupRet TxnLineID');
                 }
                 break;
             case 'itemsalestaxret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemSalesTaxRet ListID');
                 }
                 $extra['EntityType'] = 'ItemSalesTax';
                 break;
             case 'itemsalestaxgroupret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('ItemSalesTaxGroupRet ListID');
                 }
                 $extra['EntityListID'] = $extra['ListID'];
                 $extra['EntityType'] = 'ItemSalesTaxGroup';
                 break;
             case 'itemserviceret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemServiceRet ListID');
                 }
                 $extra['EntityType'] = 'ItemService';
                 break;
             case 'itemsubtotalret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('ItemSubtotalRet ListID');
                 }
                 $extra['EntityType'] = 'ItemSubtotal';
                 break;
             case 'journalentryret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('JournalEntryRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'JournalEntry';
                 break;
             case 'pricelevelret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('PriceLevelRet ListID');
                 }
                 break;
             case 'purchaseorderret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('PurchaseOrderRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'PurchaseOrder';
                 break;
             case 'purchaseorderret purchaseorderlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('PurchaseOrderLineRet TxnLineID');
                 $extra['TxnType'] = 'PurchaseOrderLine';
                 break;
             case 'purchaseorderret purchaseorderlinegroupret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('PurchaseOrderLineGroupRet TxnLineID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnLineID'];
                 $extra['TxnType'] = 'PurchaseOrderLineGroup';
                 break;
             case 'purchaseorderret purchaseorderlinegroupret purchaseorderlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('PurchaseOrderLineRet TxnLineID');
                 $extra['TxnType'] = 'PurchaseOrderLineGroup_PurchaseOrderLine';
                 break;
             case 'receivepaymentret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('ReceivePaymentRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'ReceivePayment';
                 break;
             case 'salesorderret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('SalesOrderRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'SalesOrder';
                 break;
             case 'salesorderret salesorderlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('SalesOrderLineRet TxnLineID');
                 $extra['TxnType'] = 'SalesOrderLine';
                 break;
             case 'salesorderret salesorderlinegroupret':
                 $extra['TxnLineID'] = $Node->getChildDataAt('SalesOrderLineGroupRet TxnLineID');
                 $extra['Txn_TxnID'] = $extra['TxnLineID'];
                 $extra['TxnType'] = 'SalesOrderLineGroup';
                 break;
             case 'salesorderret salesorderlinegroupret salesorderlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('SalesOrderLineRet TxnLineID');
                 $extra['TxnType'] = 'SalesOrderLineGroup_SalesOrderLine';
                 break;
             case 'salesreceiptret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('SalesReceiptRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'SalesReceipt';
                 break;
             case 'salesreceiptret salesreceiptlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('SalesReceiptLineRet TxnLineID');
                 $extra['TxnType'] = 'SalesReceiptLine';
                 break;
             case 'salesreceiptret salesreceiptlinegroupret':
                 $extra['TxnLineID'] = $Node->getChildDataAt('SalesReceiptLineGroupRet TxnLineID');
                 $extra['Txn_TxnID'] = $extra['TxnLineID'];
                 $extra['TxnType'] = 'SalesReceiptLineGroup';
                 break;
             case 'salesreceiptret salesreceiptlinegroupret salesreceiptlineret':
                 $extra['Txn_TxnID'] = $Node->getChildDataAt('SalesReceiptLineRet TxnLineID');
                 $extra['TxnType'] = 'SalesReceiptLineGroup_SalesReceiptLine';
                 break;
             case 'unitofmeasuresetret':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('UnitOfMeasureSetRet ListID');
                 }
                 break;
             case 'vendorret':
                 if (!isset($extra['EntityListID'])) {
                     $extra['EntityListID'] = $Node->getChildDataAt('VendorRet ListID');
                 }
                 $extra['EntityType'] = 'Vendor';
                 break;
             case 'vendorcreditret':
                 if (!isset($extra['TxnID'])) {
                     $extra['TxnID'] = $Node->getChildDataAt('VendorCreditRet TxnID');
                 }
                 $extra['Txn_TxnID'] = $extra['TxnID'];
                 $extra['TxnType'] = 'VendorCredit';
                 break;
             case 'vendorcreditret itemgrouplineret':
                 if (!isset($extra['TxnLineID'])) {
                     $extra['TxnLineID'] = $Node->getChildDataAt('ItemGroupLineRet TxnLineID');
                 }
                 break;
             case 'workerscompcoderet':
                 if (!isset($extra['ListID'])) {
                     $extra['ListID'] = $Node->getChildDataAt('WorkersCompCodeRet ListID');
                 }
                 break;
         }
         foreach ($Node->children() as $Child) {
             $merge = false;
             $others = array();
             switch ($Child->name()) {
                 case 'AppliedToTxnRet':
                 case 'BillingRatePerItemRet':
                 case 'CreditMemoLineRet':
                 case 'CreditMemoLineGroupRet':
                 case 'DataExtRet':
                 case 'AssignToObject':
                 case 'DefaultUnit':
                 case 'DepositLineRet':
                 case 'EstimateLineRet':
                 case 'EstimateLineGroupRet':
                 case 'ExpenseLineRet':
                 case 'InvoiceAdjustmentLineRet':
                 case 'InvoiceLineRet':
                 case 'InvoiceLineGroupRet':
                 case 'InventoryAdjustmentLineRet':
                 case 'ItemGroupRet':
                 case 'ItemGroupLine':
                 case 'ItemGroupLineRet':
                 case 'ItemInventoryAssemblyLineRet':
                 case 'ItemInventoryAssemblyLine':
                 case 'ItemLineRet':
                 case 'ItemSalesTaxGroupRet':
                     //case 'ItemSalesTaxRef':
                 //case 'ItemSalesTaxRef':
                 case 'LinkedTxn':
                 case 'PriceLevelPerItemRet':
                 case 'PurchaseOrderLineRet':
                 case 'PurchaseOrderLineGroupRet':
                 case 'RelatedUnit':
                 case 'SalesOrderLineRet':
                 case 'SalesOrderLineGroupRet':
                 case 'SalesReceiptLineRet':
                 case 'SalesReceiptLineGroupRet':
                 case 'Service':
                 case 'SubscribedServices':
                 case 'TaxLineInfoRet':
                     // * * * WARNING WARNING WARNING * * *
                     // The next line of code causes problems with some responses
                     //	because it converts our associative array to turn into a
                     //	numeric array. This causes objects to get cut into multiple
                     //	pieces:
                     //
                     // array(
                     // 	'account' => array( 'Name' => 'test', 'ListID' => 1234' ),
                     //	0 => array( account_taxlineinforet data here  ),
                     //	1 => array( 'CashFlowClassification' => 'abc' ),		// this is the other half of the Account data from the 'account' associative array key
                     // )
                     //
                     // Do not make a change to this code without double checking syncs
                     //	and talking this over with Keith first please! Thanks!
                     //
                     // Previously we were using this line, but it was causing problems:
                     //$others = array_values($objects);
                     // This line of code seems to work OK
                     $others = $objects;
                     $objects = array();
                     $merge = true;
                     break;
             }
             QuickBooks_Callbacks_SQL_Callbacks::_transformToSQLObjects($curpath . ' ' . $Node->name(), $Child, $objects, null, $extra);
             // * * * WARNING * * *
             //	Please see notes above about object chunking problems which might be related to the code below
             if ($merge) {
                 $objects = array_values($objects);
                 $objects = array_merge($others, $objects);
             }
             //
             //echo '<br />&nbsp;&nbsp;&nbsp;';
             //print_r($objects);
             //echo '<br /><br />';
         }
     } else {
         $map = array();
         $others = array();
         QuickBooks_SQL_Schema::mapToSchema(trim($curpath . ' ' . $Node->name()), QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $map, $others);
         //Okay so if the first element is a child element that is custom mapped, it'll end up creating the object with an incorrect path.
         //print('map for: {' . $curpath . ' ' . $Node->name() . "} [" . $map[0] . "]\n");
         //print_r($map);
         if ($map[0] and !isset($objects[$map[0]])) {
             //print('creating new object: ' . $map[0] . "\n");
             //print_r($objects);
             $tempMap = array();
             $tempOthers = array();
             QuickBooks_SQL_Schema::mapToSchema(trim($curpath), QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $tempMap, $tempOthers);
             if ($map[0] == 'dataextdef_assigntoobject') {
                 $objects[$map[0]] = new QuickBooks_SQL_Object($map[0], trim($curpath . ' ' . $Node->name()));
             } else {
                 $objects[$map[0]] = new QuickBooks_SQL_Object($map[0], trim($curpath));
             }
             // Some tables, such 'Invoice_InvoiceLine', won't have data in the SQL schema that
             // 	directly links them back to the 'Invoice' record they're part of. Thus, we need
             //	to add a few schema fields, and then here we set those fields to values from the
             //	parent of these objects so that they get tied to the correct 'Invoice' in the
             //	database table 'Invoice_InvoiceLine'
             $table = $objects[$map[0]]->table();
             switch (strtolower($table)) {
                 case 'account_taxlineinfo':
                     $objects[$map[0]]->set('Account_ListID', $extra['ListID']);
                     $objects[$map[0]]->set('Account_FullName', $extra['FullName']);
                     break;
                 case 'billingrate_billingrateperitem':
                     $objects[$map[0]]->set('BillingRate_ListID', $extra['ListID']);
                     break;
                 case 'billpaymentcheck_appliedtotxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('BillPaymentCheck_TxnID', $extra['TxnID']);
                     break;
                 case 'billpaymentcreditcard_appliedtotxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('BillPaymentCreditCard_TxnID', $extra['TxnID']);
                     break;
                 case 'bill_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Bill_TxnID', $extra['TxnID']);
                     break;
                 case 'bill_expenseline':
                     $objects[$map[0]]->set('Bill_TxnID', $extra['TxnID']);
                     break;
                 case 'bill_itemline':
                     $objects[$map[0]]->set('Bill_TxnID', $extra['TxnID']);
                     break;
                 case 'bill_itemgroupline':
                     $objects[$map[0]]->set('Bill_TxnID', $extra['TxnID']);
                     break;
                 case 'bill_itemgroupline_itemline':
                     $objects[$map[0]]->set('Bill_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Bill_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'check_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Check_TxnID', $extra['TxnID']);
                     break;
                 case 'check_expenseline':
                     $objects[$map[0]]->set('Check_TxnID', $extra['TxnID']);
                     break;
                 case 'check_itemline':
                     $objects[$map[0]]->set('Check_TxnID', $extra['TxnID']);
                     break;
                 case 'check_itemgroupline':
                     $objects[$map[0]]->set('Check_TxnID', $extra['TxnID']);
                     break;
                 case 'check_itemgroupline_itemline':
                     $objects[$map[0]]->set('Check_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Check_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'company_subscribedservices_service':
                     $objects[$map[0]]->set('Company_CompanyName', $extra['CompanyName']);
                     break;
                 case 'creditcardcharge_expenseline':
                     $objects[$map[0]]->set('CreditCardCharge_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcharge_itemline':
                     $objects[$map[0]]->set('CreditCardCharge_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcharge_itemgroupline':
                     $objects[$map[0]]->set('CreditCardCharge_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcharge_itemgroupline_itemline':
                     $objects[$map[0]]->set('CreditCardCharge_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('CreditCardCharge_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'creditcardcredit_expenseline':
                     $objects[$map[0]]->set('CreditCardCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcredit_itemline':
                     $objects[$map[0]]->set('CreditCardCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcredit_itemgroupline':
                     $objects[$map[0]]->set('CreditCardCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'creditcardcredit_itemgroupline_itemline':
                     $objects[$map[0]]->set('CreditCardCredit_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('CreditCardCredit_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'creditmemo_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('CreditMemo_TxnID', $extra['TxnID']);
                     break;
                 case 'creditmemo_creditmemoline':
                     $objects[$map[0]]->set('CreditMemo_TxnID', $extra['TxnID']);
                     break;
                 case 'creditmemo_creditmemolinegroup':
                     $objects[$map[0]]->set('CreditMemo_TxnID', $extra['TxnID']);
                     break;
                 case 'creditmemo_creditmemolinegroup_creditmemoline':
                     $objects[$map[0]]->set('CreditMemo_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('CreditMemo_CreditMemoLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'dataext':
                     if (!empty($extra['EntityType'])) {
                         $objects[$map[0]]->set('EntityType', $extra['EntityType']);
                         $objects[$map[0]]->set('Entity_ListID', $extra['EntityListID']);
                     } else {
                         $objects[$map[0]]->set('TxnType', $extra['TxnType']);
                         $objects[$map[0]]->set('Txn_TxnID', $extra['Txn_TxnID']);
                     }
                     break;
                 case 'dataextdef_assigntoobject':
                     if (!empty($extra['DataExtName'])) {
                         $objects[$map[0]]->set('DataExtDef_DataExtName', $extra['DataExtName']);
                     }
                     if (!empty($extra['OwnerID']) or isset($extra['OwnerID']) and $extra['OwnerID'] == 0) {
                         $objects[$map[0]]->set('DataExtDef_OwnerID', $extra['OwnerID']);
                     }
                     break;
                 case 'deposit_depositline':
                     $objects[$map[0]]->set('Deposit_TxnID', $extra['TxnID']);
                     break;
                 case 'employee_earnings':
                     $objects[$map[0]]->set('Employee_ListID', $extra['ListID']);
                     break;
                 case 'estimate_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Estimate_TxnID', $extra['TxnID']);
                     break;
                 case 'estimate_estimateline':
                     $objects[$map[0]]->set('Estimate_TxnID', $extra['TxnID']);
                     break;
                 case 'estimate_estimatelinegroup':
                     $objects[$map[0]]->set('Estimate_TxnID', $extra['TxnID']);
                     break;
                 case 'estimate_estimatelinegroup_estimateline':
                     $objects[$map[0]]->set('Estimate_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Estimate_EstimateLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'inventoryadjustment_inventoryadjustmentline':
                     $objects[$map[0]]->set('InventoryAdjustment_TxnID', $extra['TxnID']);
                     break;
                 case 'invoice_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Invoice_TxnID', $extra['TxnID']);
                     break;
                 case 'invoice_invoiceline':
                     $objects[$map[0]]->set('Invoice_TxnID', $extra['TxnID']);
                     break;
                 case 'invoice_invoicelinegroup':
                     $objects[$map[0]]->set('Invoice_TxnID', $extra['TxnID']);
                     break;
                 case 'invoice_invoicelinegroup_invoiceline':
                     $objects[$map[0]]->set('Invoice_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('Invoice_InvoiceLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'itemgroup_itemgroupline':
                     $objects[$map[0]]->set('ItemGroup_ListID', $extra['ListID']);
                     break;
                 case 'iteminventoryassembly_iteminventoryassemblyline':
                     $objects[$map[0]]->set('ItemInventoryAssembly_ListID', $extra['ListID']);
                     break;
                 case 'itemreceipt_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('ItemReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'itemreceipt_expenseline':
                     $objects[$map[0]]->set('ItemReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'itemreceipt_itemline':
                     $objects[$map[0]]->set('ItemReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'itemreceipt_itemgroupline':
                     $objects[$map[0]]->set('ItemReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'itemreceipt_itemgroupline_itemline':
                     $objects[$map[0]]->set('ItemReceipt_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('ItemReceipt_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'itemsalestaxgroup_itemsalestax':
                     $objects[$map[0]]->set('ItemSalesTaxGroup_ListID', $extra['ListID']);
                     break;
                 case 'journalentry_journalcreditline':
                     $objects[$map[0]]->set('JournalEntry_TxnID', $extra['TxnID']);
                     break;
                 case 'journalentry_journaldebitline':
                     $objects[$map[0]]->set('JournalEntry_TxnID', $extra['TxnID']);
                     break;
                 case 'pricelevel_pricelevelperitem':
                     $objects[$map[0]]->set('PriceLevel_ListID', $extra['ListID']);
                     break;
                 case 'purchaseorder_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('PurchaseOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'purchaseorder_purchaseorderline':
                     $objects[$map[0]]->set('PurchaseOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'purchaseorder_purchaseorderlinegroup':
                     $objects[$map[0]]->set('PurchaseOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'purchaseorder_purchaseorderlinegroup_purchaseorderline':
                     $objects[$map[0]]->set('PurchaseOrder_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('PurchaseOrder_PurchaseOrderLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'receivepayment_linkedtxn':
                 case 'receivepayment_appliedtotxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('ReceivePayment_TxnID', $extra['TxnID']);
                     break;
                 case 'salesorder_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('SalesOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'salesorder_salesorderline':
                     $objects[$map[0]]->set('SalesOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'salesorder_salesorderlinegroup':
                     $objects[$map[0]]->set('SalesOrder_TxnID', $extra['TxnID']);
                     break;
                 case 'salesorder_salesorderlinegroup_salesorderline':
                     $objects[$map[0]]->set('SalesOrder_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('SalesOrder_SalesOrderLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'salesreceipt_salesreceiptline':
                     $objects[$map[0]]->set('SalesReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'salesreceipt_salesreceiptlinegroup':
                     $objects[$map[0]]->set('SalesReceipt_TxnID', $extra['TxnID']);
                     break;
                 case 'salesreceipt_salesreceiptlinegroup_salesreceiptline':
                     $objects[$map[0]]->set('SalesReceipt_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('SalesReceipt_SalesReceiptLineGroup_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'unitofmeasureset_relatedunit':
                     $objects[$map[0]]->set('UnitOfMeasureSet_ListID', $extra['ListID']);
                     break;
                 case 'unitofmeasureset_defaultunit':
                     $objects[$map[0]]->set('UnitOfMeasureSet_ListID', $extra['ListID']);
                     break;
                 case 'vendorcredit_linkedtxn':
                     $objects[$map[0]]->set('FromTxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('VendorCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'vendorcredit_expenseline':
                     $objects[$map[0]]->set('VendorCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'vendorcredit_itemline':
                     $objects[$map[0]]->set('VendorCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'vendorcredit_itemgroupline':
                     $objects[$map[0]]->set('VendorCredit_TxnID', $extra['TxnID']);
                     break;
                 case 'vendorcredit_itemgroupline_itemline':
                     $objects[$map[0]]->set('VendorCredit_TxnID', $extra['TxnID']);
                     $objects[$map[0]]->set('VendorCredit_ItemGroupLine_TxnLineID', $extra['TxnLineID']);
                     break;
                 case 'workerscompcode_ratehistory':
                     $objects[$map[0]]->set('WorkersCompCode_ListID', $extra['ListID']);
                     break;
             }
         }
         if (isset($objects[$map[0]])) {
             $tempMap = array();
             $tempOthers = array();
             QuickBooks_SQL_Schema::mapToSchema(trim($curpath), QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $tempMap, $tempOthers);
             if ($map[0] == 'dataextdef_assigntoobject') {
                 if ($objects[$map[0]]->path() != trim($curpath . ' ' . $Node->name()) and strlen(trim($curpath)) < strlen($objects[$map[0]]->path())) {
                     $objects[$map[0]]->change(trim($curpath . ' ' . $Node->name()));
                 }
             } else {
                 if ($objects[$map[0]]->path() != trim($curpath) and strlen(trim($curpath)) < strlen($objects[$map[0]]->path())) {
                     $objects[$map[0]]->change(trim($curpath));
                 }
             }
             $objects[$map[0]]->set($map[1], $Node->data());
         }
     }
 }
Exemplo n.º 5
0
 /**
  * Map an XML node path to an SQL table/field OR map an SQL table/field to an XML node path
  * 
  * @param string $path			The XML path *or* 
  * @param char $mode
  * @param array $map
  * @return void
  */
 public static function mapToSchema($path_or_tablefield, $mode, &$map, &$others, $options = array())
 {
     static $xml_to_sql = array('AccountRet' => array('Account', null), 'AccountRet ParentRef' => array(null, null), 'AccountRet ParentRef *' => array('Account', 'Parent_*'), 'AccountRet TaxLineInfoRet' => array('Account_TaxLineInfo', null), 'AccountRet TaxLineInfoRet *' => array('Account_TaxLineInfo', 'TaxLineInfo_*'), 'AccountRet Desc' => array('Account', 'Descrip'), 'AccountRet DataExtRet' => array('DataExt', null), 'AccountRet DataExtRet *' => array('DataExt', '*'), 'AccountRet *' => array('Account', '*'), 'BillingRateRet' => array('BillingRate', null), 'BillingRateRet BillingRatePerItemRet' => array(null, null), 'BillingRateRet BillingRatePerItemRet ItemRef' => array(null, null), 'BillingRateRet BillingRatePerItemRet ItemRef *' => array('BillingRate_BillingRatePerItem', 'Item_*'), 'BillingRateRet BillingRatePerItemRet *' => array('BillingRate_BillingRatePerItem', '*'), 'BillingRateRet *' => array('BillingRate', '*'), 'BillPaymentRet' => array('BillPayment', null), 'BillPaymentRet *' => array('BillPayment', '*'), 'BillPaymentCheckRet' => array('BillPaymentCheck', null), 'BillPaymentCheckRet PayeeEntityRef' => array(null, null), 'BillPaymentCheckRet PayeeEntityRef *' => array('BillPaymentCheck', 'PayeeEntity_*'), 'BillPaymentCheckRet APAccountRef' => array(null, null), 'BillPaymentCheckRet APAccountRef *' => array('BillPaymentCheck', 'APAccount_*'), 'BillPaymentCheckRet BankAccountRef' => array(null, null), 'BillPaymentCheckRet BankAccountRef *' => array('BillPaymentCheck', 'BankAccount_*'), 'BillPaymentCheckRet Address' => array(null, null), 'BillPaymentCheckRet Address *' => array('BillPaymentCheck', 'Address_*'), 'BillPaymentCheckRet AddressBlock' => array(null, null), 'BillPaymentCheckRet AddressBlock *' => array('BillPaymentCheck', 'AddressBlock_*'), 'BillPaymentCheckRet AppliedToTxnRet' => array(null, null), 'BillPaymentCheckRet AppliedToTxnRet TxnID' => array('BillPaymentCheck_AppliedToTxn', 'ToTxnID'), 'BillPaymentCheckRet AppliedToTxnRet DiscountAccountRef' => array(null, null), 'BillPaymentCheckRet AppliedToTxnRet DiscountAccountRef *' => array('BillPaymentCheck_AppliedToTxn', 'DiscountAccount_*'), 'BillPaymentCheckRet AppliedToTxnRet *' => array('BillPaymentCheck_AppliedToTxn', '*'), 'BillPaymentCheckRet DataExtRet' => array('DataExt', null), 'BillPaymentCheckRet DataExtRet *' => array('DataExt', '*'), 'BillPaymentCheckRet *' => array('BillPaymentCheck', '*'), 'BillPaymentCreditCardRet' => array('BillPaymentCreditCard', null), 'BillPaymentCreditCardRet PayeeEntityRef' => array(null, null), 'BillPaymentCreditCardRet PayeeEntityRef *' => array('BillPaymentCreditCard', 'PayeeEntity_*'), 'BillPaymentCreditCardRet APAccountRef' => array(null, null), 'BillPaymentCreditCardRet APAccountRef *' => array('BillPaymentCreditCard', 'APAccount_*'), 'BillPaymentCreditCardRet CreditCardAccountRef' => array(null, null), 'BillPaymentCreditCardRet CreditCardAccountRef *' => array('BillPaymentCreditCard', 'CreditCardAccount_*'), 'BillPaymentCreditCardRet AppliedToTxnRet' => array(null, null), 'BillPaymentCreditCardRet AppliedToTxnRet TxnID' => array('BillPaymentCreditCard_AppliedToTxn', 'ToTxnID'), 'BillPaymentCreditCardRet AppliedToTxnRet DiscountAccountRef' => array(null, null), 'BillPaymentCreditCardRet AppliedToTxnRet DiscountAccountRef *' => array('BillPaymentCreditCard_AppliedToTxn', 'DiscountAccount_*'), 'BillPaymentCreditCardRet AppliedToTxnRet *' => array('BillPaymentCreditCard_AppliedToTxn', '*'), 'BillPaymentCreditCardRet DataExtRet' => array('DataExt', null), 'BillPaymentCreditCardRet DataExtRet *' => array('DataExt', '*'), 'BillPaymentCreditCardRet *' => array('BillPaymentCreditCard', '*'), 'BillRet' => array('Bill', null), 'BillRet VendorRef' => array(null, null), 'BillRet VendorRef *' => array('Bill', 'Vendor_*'), 'BillRet APAccountRef' => array(null, null), 'BillRet APAccountRef *' => array('Bill', 'APAccount_*'), 'BillRet TermsRef' => array(null, null), 'BillRet TermsRef *' => array('Bill', 'Terms_*'), 'BillRet LinkedTxn' => array(null, null), 'BillRet LinkedTxn TxnID' => array('Bill_LinkedTxn', 'ToTxnID'), 'BillRet LinkedTxn *' => array('Bill_LinkedTxn', '*'), 'BillRet ExpenseLineRet' => array(null, null), 'BillRet ExpenseLineRet AccountRef' => array(null, null), 'BillRet ExpenseLineRet AccountRef *' => array('Bill_ExpenseLine', 'Account_*'), 'BillRet ExpenseLineRet CustomerRef' => array(null, null), 'BillRet ExpenseLineRet CustomerRef *' => array('Bill_ExpenseLine', 'Customer_*'), 'BillRet ExpenseLineRet ClassRef' => array(null, null), 'BillRet ExpenseLineRet ClassRef *' => array('Bill_ExpenseLine', 'Class_*'), 'BillRet ExpenseLineRet *' => array('Bill_ExpenseLine', '*'), 'BillRet ItemLineRet' => array(null, null), 'BillRet ItemLineRet ItemRef' => array(null, null), 'BillRet ItemLineRet ItemRef *' => array('Bill_ItemLine', 'Item_*'), 'BillRet ItemLineRet CustomerRef' => array(null, null), 'BillRet ItemLineRet CustomerRef *' => array('Bill_ItemLine', 'Customer_*'), 'BillRet ItemLineRet ClassRef' => array(null, null), 'BillRet ItemLineRet ClassRef *' => array('Bill_ItemLine', 'Class_*'), 'BillRet ItemLineRet Desc' => array('Bill_ItemLine', 'Descrip'), 'BillRet ItemLineRet *' => array('Bill_ItemLine', '*'), 'BillRet ItemGroupLineRet' => array(null, null), 'BillRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'BillRet ItemGroupLineRet ItemGroupRef *' => array('Bill_ItemGroupLine', 'ItemGroup_*'), 'BillRet ItemGroupLineRet Desc' => array('Bill_ItemGroupLine', 'Descrip'), 'BillRet ItemGroupLineRet ItemLineRet' => array(null, null), 'BillRet ItemGroupLineRet ItemLineRet ItemRef' => array(null, null), 'BillRet ItemGroupLineRet ItemLineRet ItemRef *' => array('Bill_ItemGroupLine_ItemLine', 'Item_*'), 'BillRet ItemGroupLineRet ItemLineRet Desc' => array('Bill_ItemGroupLine_ItemLine', 'Descrip'), 'BillRet ItemGroupLineRet ItemLineRet CustomerRef' => array(null, null), 'BillRet ItemGroupLineRet ItemLineRet CustomerRef *' => array('Bill_ItemGroupLine_ItemLine', 'Customer_*'), 'BillRet ItemGroupLineRet ItemLineRet ClassRef' => array(null, null), 'BillRet ItemGroupLineRet ItemLineRet ClassRef *' => array('Bill_ItemGroupLine_ItemLine', 'Class_*'), 'BillRet ItemGroupLineRet ItemLineRet *' => array('Bill_ItemGroupLine_ItemLine', '*'), 'BillRet ItemGroupLineRet *' => array('Bill_ItemGroupLine', '*'), 'BillRet DataExtRet' => array('DataExt', null), 'BillRet DataExtRet *' => array('DataExt', '*'), 'BillRet *' => array('Bill', '*'), 'BillToPayRet' => array('BillToPay', null), 'BillToPayRet BillToPay' => array(null, null), 'BillToPayRet BillToPay APAccountRef' => array(null, null), 'BillToPayRet BillToPay APAccountRef *' => array('BillToPay', 'APAccount_*'), 'BillToPayRet BillToPay *' => array('BillToPay', '*'), 'BillToPayRet CreditToApply' => array(null, null), 'BillToPayRet CreditToApply APAccountRef' => array(null, null), 'BillToPayRet CreditToApply APAccountRef *' => array('CreditToApply', 'APAccount_*'), 'BillToPayRet CreditToApply *' => array('CreditToApply', '*'), 'BillToPayRet *' => array(null, null), 'ChargeRet' => array('Charge', null), 'ChargeRet CustomerRef' => array(null, null), 'ChargeRet CustomerRef *' => array('Charge', 'Customer_*'), 'ChargeRet ItemRef' => array(null, null), 'ChargeRet ItemRef *' => array('Charge', 'Item_*'), 'ChargeRet OverrideUOMSetRef' => array(null, null), 'ChargeRet OverrideUOMSetRef *' => array('Charge', 'OverrideUOMSet_*'), 'ChargeRet Desc' => array('Charge', 'Descrip'), 'ChargeRet ARAccountRef' => array(null, null), 'ChargeRet ARAccountRef *' => array('Charge', 'ARAccount_*'), 'ChargeRet ClassRef' => array(null, null), 'ChargeRet ClassRef *' => array('Charge', 'Class_*'), 'ChargeRet DataExtRet' => array('DataExt', null), 'ChargeRet DataExtRet *' => array('DataExt', '*'), 'ChargeRet *' => array('Charge', '*'), 'CheckRet' => array('Check', null), 'CheckRet AccountRef' => array(null, null), 'CheckRet AccountRef *' => array('Check', 'Account_*'), 'CheckRet PayeeEntityRef' => array(null, null), 'CheckRet PayeeEntityRef *' => array('Check', 'PayeeEntityRef_*'), 'CheckRet AddressBlock' => array(null, null), 'CheckRet AddressBlock *' => array('Check', 'AddressBlock_*'), 'CheckRet Address' => array(null, null), 'CheckRet Address *' => array('Check', 'Address_*'), 'CheckRet LinkedTxn' => array(null, null), 'CheckRet LinkedTxn TxnID' => array('Check_LinkedTxn', 'ToTxnID'), 'CheckRet LinkedTxn *' => array('Check_LinkedTxn', '*'), 'CheckRet ExpenseLineRet' => array(null, null), 'CheckRet ExpenseLineRet AccountRef' => array(null, null), 'CheckRet ExpenseLineRet AccountRef *' => array('Check_ExpenseLine', 'Account_*'), 'CheckRet ExpenseLineRet CustomerRef' => array(null, null), 'CheckRet ExpenseLineRet CustomerRef *' => array('Check_ExpenseLine', 'Customer_*'), 'CheckRet ExpenseLineRet ClassRef' => array(null, null), 'CheckRet ExpenseLineRet ClassRef *' => array('Check_ExpenseLine', 'Class_*'), 'CheckRet ExpenseLineRet *' => array('Check_ExpenseLine', '*'), 'CheckRet ItemLineRet' => array(null, null), 'CheckRet ItemLineRet ItemRef' => array(null, null), 'CheckRet ItemLineRet ItemRef *' => array('Check_ItemLine', 'Item_*'), 'CheckRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'CheckRet ItemLineRet OverrideUOMSetRef *' => array('Check_ItemLine', 'OverrideUOMSet_*'), 'CheckRet ItemLineRet CustomerRef' => array(null, null), 'CheckRet ItemLineRet CustomerRef *' => array('Check_ItemLine', 'Customer_*'), 'CheckRet ItemLineRet ClassRef' => array(null, null), 'CheckRet ItemLineRet ClassRef *' => array('Check_ItemLine', 'Class_*'), 'CheckRet ItemLineRet Desc' => array('Check_ItemLine', 'Descrip'), 'CheckRet ItemLineRet *' => array('Check_ItemLine', '*'), 'CheckRet ItemGroupLineRet' => array(null, null), 'CheckRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'CheckRet ItemGroupLineRet ItemGroupRef *' => array('Check_ItemGroupLine', 'ItemGroup_*'), 'CheckRet ItemGroupLineRet Desc' => array('Check_ItemGroupLine', 'Descrip'), 'CheckRet ItemGroupLineRet OverrideUOMSetRef' => array(null, null), 'CheckRet ItemGroupLineRet OverrideUOMSetRef *' => array('Check_ItemGroupLine', 'OverrideUOMSet_*'), 'CheckRet ItemGroupLineRet ItemLineRet' => array(null, null), 'CheckRet ItemGroupLineRet ItemLineRet ItemRef' => array(null, null), 'CheckRet ItemGroupLineRet ItemLineRet ItemRef *' => array('Check_ItemGroupLine_ItemLine', 'Item_*'), 'CheckRet ItemGroupLineRet ItemLineRet Desc' => array('Check_ItemGroupLine_ItemLine', 'Descrip'), 'CheckRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'CheckRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef *' => array('Check_ItemGroupLine_ItemLine', 'OverrideUOMSet_*'), 'CheckRet ItemGroupLineRet ItemLineRet CustomerRef' => array(null, null), 'CheckRet ItemGroupLineRet ItemLineRet CustomerRef *' => array('Check_ItemGroupLine_ItemLine', 'Customer_*'), 'CheckRet ItemGroupLineRet ItemLineRet ClassRef' => array(null, null), 'CheckRet ItemGroupLineRet ItemLineRet ClassRef *' => array('Check_ItemGroupLine_ItemLine', 'Class_*'), 'CheckRet ItemGroupLineRet ItemLineRet *' => array('Check_ItemGroupLine_ItemLine', '*'), 'CheckRet ItemGroupLineRet *' => array('Check_ItemGroupLine', '*'), 'CheckRet DataExtRet' => array(null, null), 'CheckRet DataExtRet *' => array('DataExt', '*'), 'CheckRet *' => array('Check', '*'), 'ClassRet' => array('Class', null), 'ClassRet ParentRef' => array(null, null), 'ClassRet ParentRef *' => array('Class', 'Parent_*'), 'ClassRet *' => array('Class', '*'), 'CompanyRet' => array('Company', null), 'CompanyRet Address' => array(null, null), 'CompanyRet Address *' => array('Company', 'Address_*'), 'CompanyRet AddressBlock' => array(null, null), 'CompanyRet AddressBlock *' => array('Company', 'AddressBlock_*'), 'CompanyRet LegalAddress' => array(null, null), 'CompanyRet LegalAddress *' => array('Company', 'LegalAddress_*'), 'CompanyRet CompanyAddressForCustomer' => array(null, null), 'CompanyRet CompanyAddressForCustomer *' => array('Company', 'Company_CompanyAddressForCustomer_*'), 'CompanyRet CompanyAddressBlockForCustomer' => array(null, null), 'CompanyRet CompanyAddressBlockForCustomer *' => array('Company', 'Company_CompanyAddressBlockForCustomer_*'), 'CompanyRet SubscribedServices' => array(null, null), 'CompanyRet SubscribedServices Service' => array(null, null), 'CompanyRet SubscribedServices Service *' => array('Company_SubscribedServices_Service', '*'), 'CompanyRet SubscribedServices *' => array('Company', 'SubscribedServices_*'), 'CompanyRet DataExtRet' => array(null, null), 'CompanyRet DataExtRet *' => array('DataExt', '*'), 'CompanyRet *' => array('Company', '*'), 'CreditCardChargeRet' => array('CreditCardCharge', null), 'CreditCardChargeRet AccountRef' => array(null, null), 'CreditCardChargeRet AccountRef *' => array('CreditCardCharge', 'Account_*'), 'CreditCardChargeRet PayeeEntityRef' => array(null, null), 'CreditCardChargeRet PayeeEntityRef *' => array('CreditCardCharge', 'PayeeEntity_*'), 'CreditCardChargeRet ItemLineRet' => array(null, null), 'CreditCardChargeRet ItemLineRet Desc' => array('CreditCardCharge_ItemLine', 'Descrip'), 'CreditCardChargeRet ItemLineRet ItemRef' => array(null, null), 'CreditCardChargeRet ItemLineRet ItemRef *' => array('CreditCardCharge_ItemLine', 'Item_*'), 'CreditCardChargeRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'CreditCardChargeRet ItemLineRet OverrideUOMSetRef *' => array('CreditCardCharge_ItemLine', 'OverrideUOMSet_*'), 'CreditCardChargeRet ItemLineRet CustomerRef' => array(null, null), 'CreditCardChargeRet ItemLineRet CustomerRef *' => array('CreditCardCharge_ItemLine', 'Customer_*'), 'CreditCardChargeRet ItemLineRet ClassRef' => array(null, null), 'CreditCardChargeRet ItemLineRet ClassRef *' => array('CreditCardCharge_ItemLine', 'Class_*'), 'CreditCardChargeRet ItemLineRet *' => array('CreditCardCharge_ItemLine', '*'), 'CreditCardChargeRet ItemGroupLineRet' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet Desc' => array('CreditCardCharge_ItemGroupLine', 'Descrip'), 'CreditCardChargeRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemGroupRef *' => array('CreditCardCharge_ItemGroupLine', 'ItemGroup_*'), 'CreditCardChargeRet ItemGroupLineRet OverrideUOMSetRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet OverrideUOMSetRef *' => array('CreditCardCharge_ItemGroupLine', 'OverrideUOMSet_*'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet ItemRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet ItemRef *' => array('CreditCardCharge_ItemGroupLine_ItemLine', 'Item_*'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet Desc' => array('CreditCardCharge_ItemGroupLine_ItemLine', 'Descrip'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef *' => array('CreditCardCharge_ItemGroupLine_ItemLine', 'OverrideUOMSet_*'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet CustomerRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet CustomerRef *' => array('CreditCardCharge_ItemGroupLine_ItemLine', 'Customer_*'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet ClassRef' => array(null, null), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet ClassRef *' => array('CreditCardCharge_ItemGroupLine_ItemLine', 'Class_*'), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet *' => array('CreditCardCharge_ItemGroupLine_ItemLine', '*'), 'CreditCardChargeRet ItemGroupLineRet *' => array('CreditCardCharge_ItemGroupLine', '*'), 'CreditCardChargeRet ExpenseLineRet' => array(null, null), 'CreditCardChargeRet ExpenseLineRet AccountRef' => array(null, null), 'CreditCardChargeRet ExpenseLineRet AccountRef *' => array('CreditCardCharge_ExpenseLine', 'Account_*'), 'CreditCardChargeRet ExpenseLineRet CustomerRef' => array(null, null), 'CreditCardChargeRet ExpenseLineRet CustomerRef *' => array('CreditCardCharge_ExpenseLine', 'Customer_*'), 'CreditCardChargeRet ExpenseLineRet ClassRef' => array(null, null), 'CreditCardChargeRet ExpenseLineRet ClassRef *' => array('CreditCardCharge_ExpenseLine', 'Class_*'), 'CreditCardChargeRet ExpenseLineRet *' => array('CreditCardCharge_ExpenseLine', '*'), 'CreditCardChargeRet DataExtRet' => array(null, null), 'CreditCardChargeRet DataExtRet *' => array('DataExt', '*'), 'CreditCardChargeRet *' => array('CreditCardCharge', '*'), 'CreditCardCreditRet' => array('CreditCardCredit', null), 'CreditCardCreditRet AccountRef' => array(null, null), 'CreditCardCreditRet AccountRef *' => array('CreditCardCredit', 'Account_*'), 'CreditCardCreditRet PayeeEntityRef' => array(null, null), 'CreditCardCreditRet PayeeEntityRef *' => array('CreditCardCredit', 'PayeeEntity_*'), 'CreditCardCreditRet ExpenseLineRet' => array(null, null), 'CreditCardCreditRet ExpenseLineRet AccountRef' => array(null, null), 'CreditCardCreditRet ExpenseLineRet AccountRef *' => array('CreditCardCredit_ExpenseLine', 'Account_*'), 'CreditCardCreditRet ExpenseLineRet CustomerRef' => array(null, null), 'CreditCardCreditRet ExpenseLineRet CustomerRef *' => array('CreditCardCredit_ExpenseLine', 'Customer_*'), 'CreditCardCreditRet ExpenseLineRet ClassRef' => array(null, null), 'CreditCardCreditRet ExpenseLineRet ClassRef *' => array('CreditCardCredit_ExpenseLine', 'Class_*'), 'CreditCardCreditRet ExpenseLineRet *' => array('CreditCardCredit_ExpenseLine', '*'), 'CreditCardCreditRet ItemLineRet' => array(null, null), 'CreditCardCreditRet ItemLineRet Desc' => array('CreditCardCredit_ItemLine', 'Descrip'), 'CreditCardCreditRet ItemLineRet ItemRef' => array(null, null), 'CreditCardCreditRet ItemLineRet ItemRef *' => array('CreditCardCredit_ItemLine', 'Item_*'), 'CreditCardCreditRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'CreditCardCreditRet ItemLineRet OverrideUOMSetRef *' => array('CreditCardCredit_ItemLine', 'OverrideUOMSet_*'), 'CreditCardCreditRet ItemLineRet CustomerRef' => array(null, null), 'CreditCardCreditRet ItemLineRet CustomerRef *' => array('CreditCardCredit_ItemLine', 'Customer_*'), 'CreditCardCreditRet ItemLineRet ClassRef' => array(null, null), 'CreditCardCreditRet ItemLineRet ClassRef *' => array('CreditCardCredit_ItemLine', 'Class_*'), 'CreditCardCreditRet ItemLineRet *' => array('CreditCardCredit_ItemLine', '*'), 'CreditCardCreditRet ItemGroupLineRet' => array(null, null), 'CreditCardCreditRet ItemGroupLineRet Desc' => array('CreditCardCredit_ItemGroupLine', 'Descrip'), 'CreditCardCreditRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'CreditCardCreditRet ItemGroupLineRet ItemGroupRef *' => array('CreditCardCredit_ItemGroupLine', 'ItemGroup_*'), 'CreditCardCreditRet ItemGroupLineRet OverrideUOMSetRef' => array(null, null), 'CreditCardCreditRet ItemGroupLineRet OverrideUOMSetRef *' => array('CreditCardCredit_ItemGroupLine', 'OverrideUOMSet_*'), 'CreditCardCreditRet ItemGroupLineRet ItemLineRet' => array(null, null), 'CreditCardCreditRet ItemGroupLineRet ItemLineRet Desc' => array('CreditCardCredit_ItemGroupLine_ItemLine', 'Descrip'), 'CreditCardCreditRet ItemGroupLineRet ItemLineRet *' => array('CreditCardCredit_ItemGroupLine_ItemLine', '*'), 'CreditCardCreditRet ItemGroupLineRet *' => array('CreditCardCredit_ItemGroupLine', '*'), 'CreditCardCreditRet DataExtRet' => array(null, null), 'CreditCardCreditRet DataExtRet *' => array('DataExt', '*'), 'CreditCardCreditRet *' => array('CreditCardCredit', '*'), 'CreditMemoRet' => array('CreditMemo', null), 'CreditMemoRet CustomerRef' => array(null, null), 'CreditMemoRet CustomerRef *' => array('CreditMemo', 'Customer_*'), 'CreditMemoRet ClassRef' => array(null, null), 'CreditMemoRet ClassRef *' => array('CreditMemo', 'Class_*'), 'CreditMemoRet ARAccountRef' => array(null, null), 'CreditMemoRet ARAccountRef *' => array('CreditMemo', 'ARAccount_*'), 'CreditMemoRet TemplateRef' => array(null, null), 'CreditMemoRet TemplateRef *' => array('CreditMemo', 'Template_*'), 'CreditMemoRet BillAddress' => array(null, null), 'CreditMemoRet BillAddress *' => array('CreditMemo', 'BillAddress_*'), 'CreditMemoRet BillAddressBlock' => array(null, null), 'CreditMemoRet BillAddressBlock *' => array('CreditMemo', 'BillAddressBlock_*'), 'CreditMemoRet ShipAddress' => array(null, null), 'CreditMemoRet ShipAddress *' => array('CreditMemo', 'ShipAddress_*'), 'CreditMemoRet ShipAddressBlock' => array(null, null), 'CreditMemoRet ShipAddressBlock *' => array('CreditMemo', 'ShipAddressBlock_*'), 'CreditMemoRet TermsRef' => array(null, null), 'CreditMemoRet TermsRef *' => array('CreditMemo', 'Terms_*'), 'CreditMemoRet SalesRepRef' => array(null, null), 'CreditMemoRet SalesRepRef *' => array('CreditMemo', 'SalesRep_*'), 'CreditMemoRet ShipMethodRef' => array(null, null), 'CreditMemoRet ShipMethodRef *' => array('CreditMemo', 'ShipMethod_*'), 'CreditMemoRet ItemSalesTaxRef' => array(null, null), 'CreditMemoRet ItemSalesTaxRef *' => array('CreditMemo', 'ItemSalesTax_*'), 'CreditMemoRet CustomerMsgRef' => array(null, null), 'CreditMemoRet CustomerMsgRef *' => array('CreditMemo', 'CustomerMsg_*'), 'CreditMemoRet CustomerSalesTaxCodeRef' => array(null, null), 'CreditMemoRet CustomerSalesTaxCodeRef *' => array('CreditMemo', 'CustomerSalesTaxCode_*'), 'CreditMemoRet LinkedTxn' => array(null, null), 'CreditMemoRet LinkedTxn TxnID' => array('CreditMemo_LinkedTxn', 'ToTxnID'), 'CreditMemoRet LinkedTxn *' => array('CreditMemo_LinkedTxn', '*'), 'CreditMemoRet CreditMemoLineRet' => array(null, null), 'CreditMemoRet CreditMemoLineRet Desc' => array('CreditMemo_CreditMemoLine', 'Descrip'), 'CreditMemoRet CreditMemoLineRet ItemRef' => array(null, null), 'CreditMemoRet CreditMemoLineRet ItemRef *' => array('CreditMemo_CreditMemoLine', 'Item_*'), 'CreditMemoRet CreditMemoLineRet OverrideUOMSetRef' => array(null, null), 'CreditMemoRet CreditMemoLineRet OverrideUOMSetRef *' => array('CreditMemo_CreditMemoLine', 'OverrideUOMSet_*'), 'CreditMemoRet CreditMemoLineRet ClassRef' => array(null, null), 'CreditMemoRet CreditMemoLineRet ClassRef *' => array('CreditMemo_CreditMemoLine', 'Class_*'), 'CreditMemoRet CreditMemoLineRet SalesTaxCodeRef' => array(null, null), 'CreditMemoRet CreditMemoLineRet SalesTaxCodeRef *' => array('CreditMemo_CreditMemoLine', 'SalesTaxCode_*'), 'CreditMemoRet CreditMemoLineRet CreditCardTxnInfo' => array(null, null), 'CreditMemoRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'CreditMemoRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('CreditMemo_CreditMemoLine', 'CreditCardTxnInputInfo_*'), 'CreditMemoRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'CreditMemoRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('CreditMemo_CreditMemoLine', 'CreditCardTxnResultInfo_*'), 'CreditMemoRet CreditMemoLineRet DataExtRet' => array('DataExt', null), 'CreditMemoRet CreditMemoLineRet DataExtRet *' => array('DataExt', '*'), 'CreditMemoRet CreditMemoLineRet *' => array('CreditMemo_CreditMemoLine', '*'), 'CreditMemoRet CreditMemoLineGroupRet' => array('CreditMemo_CreditMemoLineGroup', null), 'CreditMemoRet CreditMemoLineGroupRet Desc' => array('CreditMemo_CreditMemoLineGroup', 'Descrip'), 'CreditMemoRet CreditMemoLineGroupRet ItemGroupRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet ItemGroupRef *' => array('CreditMemo_CreditMemoLineGroup', 'ItemGroup_*'), 'CreditMemoRet CreditMemoLineGroupRet ItemRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet ItemRef *' => array('CreditMemo_CreditMemoLineGroup', 'ItemGroup_*'), 'CreditMemoRet CreditMemoLineGroupRet OverrideUOMSetRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet OverrideUOMSetRef *' => array('CreditMemo_CreditMemoLineGroup', 'OverrideUOMSet_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet ItemRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet ItemRef *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'Item_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet Desc' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'Descrip'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet OverrideUOMSetRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet OverrideUOMSetRef *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'OverrideUOMSet_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet ClassRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet ClassRef *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'Class_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet SalesTaxCodeRef' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet SalesTaxCodeRef *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'SalesTaxCode_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'CreditCardTxnInfo_CreditCardTxnInputInfo_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'CreditCardTxnInfo_CreditCardTxnResultInfo_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet CreditCardTxnInfo *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'CreditCardTxnInfo_*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet DataExtRet' => array(null, null), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet DataExtRet *' => array('DataExt', '*'), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet *' => array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', '*'), 'CreditMemoRet CreditMemoLineGroupRet DataExtRet' => array('DataExt', null), 'CreditMemoRet CreditMemoLineGroupRet DataExtRet *' => array('DataExt', '*'), 'CreditMemoRet CreditMemoLineGroupRet *' => array('CreditMemo_CreditMemoLineGroup', '*'), 'CreditMemoRet DataExtRet' => array('DataExt', null), 'CreditMemoRet DataExtRet *' => array('DataExt', '*'), 'CreditMemoRet *' => array('CreditMemo', '*'), 'CustomerRet' => array('Customer', null), 'CustomerRet ParentRef' => array(null, null), 'CustomerRet ParentRef *' => array('Customer', 'Parent_*'), 'CustomerRet BillAddress' => array(null, null), 'CustomerRet BillAddress *' => array('Customer', 'BillAddress_*'), 'CustomerRet ShipAddress' => array(null, null), 'CustomerRet ShipAddress *' => array('Customer', 'ShipAddress_*'), 'CustomerRet BillAddressBlock' => array(null, null), 'CustomerRet BillAddressBlock *' => array('Customer', 'BillAddressBlock_*'), 'CustomerRet ShipAddressBlock' => array(null, null), 'CustomerRet ShipAddressBlock *' => array('Customer', 'ShipAddressBlock_*'), 'CustomerRet CreditCardInfo' => array(null, null), 'CustomerRet CreditCardInfo *' => array('Customer', 'CreditCardInfo_*'), 'CustomerRet CustomerTypeRef' => array(null, null), 'CustomerRet CustomerTypeRef *' => array('Customer', 'CustomerType_*'), 'CustomerRet TermsRef' => array(null, null), 'CustomerRet TermsRef *' => array('Customer', 'Terms_*'), 'CustomerRet SalesRepRef' => array(null, null), 'CustomerRet SalesRepRef *' => array('Customer', 'SalesRep_*'), 'CustomerRet SalesTaxCodeRef' => array(null, null), 'CustomerRet SalesTaxCodeRef *' => array('Customer', 'SalesTaxCode_*'), 'CustomerRet ItemSalesTaxRef' => array(null, null), 'CustomerRet ItemSalesTaxRef *' => array('Customer', 'ItemSalesTax_*'), 'CustomerRet PreferredPaymentMethodRef' => array(null, null), 'CustomerRet PreferredPaymentMethodRef *' => array('Customer', 'PreferredPaymentMethod_*'), 'CustomerRet JobTypeRef' => array(null, null), 'CustomerRet JobTypeRef *' => array('Customer', 'JobType_*'), 'CustomerRet PriceLevelRef' => array(null, null), 'CustomerRet PriceLevelRef *' => array('Customer', 'PriceLevel_*'), 'CustomerRet DataExtRet' => array('DataExt', null), 'CustomerRet DataExtRet *' => array('DataExt', '*'), 'CustomerRet *' => array('Customer', '*'), 'CustomerTypeRet' => array('CustomerType', null), 'CustomerTypeRet ParentRef' => array('CustomerType', null), 'CustomerTypeRet ParentRef *' => array('CustomerType', 'Parent_*'), 'CustomerTypeRet *' => array('CustomerType', '*'), 'CustomerMsgRet' => array('CustomerMsg', null), 'CustomerMsgRet *' => array('CustomerMsg', '*'), 'DataExtDefRet' => array('DataExtDef', null), 'DataExtDefRet AssignToObject' => array('DataExtDef_AssignToObject', 'AssignToObject'), 'DataExtDefRet *' => array('DataExtDef', '*'), 'DateDrivenTermsRet' => array('DateDrivenTerms', null), 'DateDrivenTermsRet *' => array('DateDrivenTerms', '*'), 'DepositRet' => array('Deposit', null), 'DepositRet DepositToAccountRef' => array(null, null), 'DepositRet DepositToAccountRef *' => array('Deposit', 'DepositToAccount_*'), 'DepositRet CashBackInfoRet' => array(null, null), 'DepositRet CashBackInfoRet AccountRef' => array(null, null), 'DepositRet CashBackInfoRet AccountRef *' => array('Deposit', 'CashBackInfo_Account_*'), 'DepositRet CashBackInfoRet *' => array('Deposit', 'CashBackInfo_*'), 'DepositRet DepositLineRet' => array(null, null), 'DepositRet DepositLineRet EntityRef' => array(null, null), 'DepositRet DepositLineRet EntityRef *' => array('Deposit_DepositLine', 'Entity_*'), 'DepositRet DepositLineRet AccountRef' => array(null, null), 'DepositRet DepositLineRet AccountRef *' => array('Deposit_DepositLine', 'Account_*'), 'DepositRet DepositLineRet PaymentMethodRef' => array(null, null), 'DepositRet DepositLineRet PaymentMethodRef *' => array('Deposit_DepositLine', 'PaymentMethod_*'), 'DepositRet DepositLineRet ClassRef' => array(null, null), 'DepositRet DepositLineRet ClassRef *' => array('Deposit_DepositLine', 'Class_*'), 'DepositRet DepositLineRet *' => array('Deposit_DepositLine', '*'), 'DepositRet DataExtRet' => array(null, null), 'DepositRet DataExtRet *' => array('DataExt', '*'), 'DepositRet *' => array('Deposit', '*'), 'EmployeeRet' => array('Employee', null), 'EmployeeRet EmployeeAddress' => array(null, null), 'EmployeeRet EmployeeAddress *' => array('Employee', 'EmployeeAddress_*'), 'EmployeeRet BillingRateRef' => array(null, null), 'EmployeeRet BillingRateRef *' => array('Employee', 'BillingRate_*'), 'EmployeeRet EmployeePayrollInfo' => array(null, null), 'EmployeeRet EmployeePayrollInfo ClassRef' => array(null, null), 'EmployeeRet EmployeePayrollInfo ClassRef *' => array('Employee', 'EmployeePayrollInfo_Class_*'), 'EmployeeRet EmployeePayrollInfo Earnings' => array(null, null), 'EmployeeRet EmployeePayrollInfo Earnings PayrollItemWageRef' => array(null, null), 'EmployeeRet EmployeePayrollInfo Earnings PayrollItemWageRef *' => array('Employee_Earnings', 'PayrollItemWage_*'), 'EmployeeRet EmployeePayrollInfo Earnings *' => array('Employee_Earnings', '*'), 'EmployeeRet EmployeePayrollInfo SickHours' => array(null, null), 'EmployeeRet EmployeePayrollInfo SickHours *' => array('Employee', 'EmployeePayrollInfo_SickHours_*'), 'EmployeeRet EmployeePayrollInfo VacationHours' => array(null, null), 'EmployeeRet EmployeePayrollInfo VacationHours *' => array('Employee', 'EmployeePayrollInfo_VacationHours_*'), 'EmployeeRet EmployeePayrollInfo *' => array('Employee', 'EmployeePayrollInfo_*'), 'EmployeeRet DataExtRet' => array(null, null), 'EmployeeRet DataExtRet *' => array('DataExt', '*'), 'EmployeeRet *' => array('Employee', '*'), 'EstimateRet' => array('Estimate', null), 'EstimateRet CustomerRef' => array(null, null), 'EstimateRet CustomerRef *' => array('Estimate', 'Customer_*'), 'EstimateRet ClassRef' => array(null, null), 'EstimateRet ClassRef *' => array('Estimate', 'Class_*'), 'EstimateRet TemplateRef' => array(null, null), 'EstimateRet TemplateRef *' => array('Estimate', 'Template_*'), 'EstimateRet BillAddress' => array(null, null), 'EstimateRet BillAddress *' => array('Estimate', 'BillAddress_*'), 'EstimateRet ShipAddress' => array(null, null), 'EstimateRet ShipAddress *' => array('Estimate', 'ShipAddress_*'), 'EstimateRet BillAddressBlock' => array(null, null), 'EstimateRet BillAddressBlock *' => array('Estimate', 'BillAddressBlock_*'), 'EstimateRet ShipAddressBlock' => array(null, null), 'EstimateRet ShipAddressBlock *' => array('Estimate', 'ShipAddressBlock_*'), 'EstimateRet TermsRef' => array(null, null), 'EstimateRet TermsRef *' => array('Estimate', 'Terms_*'), 'EstimateRet ItemSalesTaxRef' => array(null, null), 'EstimateRet ItemSalesTaxRef *' => array('Estimate', 'ItemSalesTax_*'), 'EstimateRet SalesRepRef' => array(null, null), 'EstimateRet SalesRepRef *' => array('Estimate', 'SalesRep_*'), 'EstimateRet CustomerMsgRef' => array(null, null), 'EstimateRet CustomerMsgRef *' => array('Estimate', 'CustomerMsg_*'), 'EstimateRet CustomerSalesTaxCodeRef' => array(null, null), 'EstimateRet CustomerSalesTaxCodeRef *' => array('Estimate', 'CustomerSalesTaxCode_*'), 'EstimateRet LinkedTxn' => array('Estimate_LinkedTxn', null), 'EstimateRet LinkedTxn TxnID' => array('Estimate_LinkedTxn', 'ToTxnID'), 'EstimateRet LinkedTxn *' => array('Estimate_LinkedTxn', '*'), 'EstimateRet EstimateLineRet' => array(null, null), 'EstimateRet EstimateLineRet Desc' => array('Estimate_EstimateLine', 'Descrip'), 'EstimateRet EstimateLineRet ItemRef' => array(null, null), 'EstimateRet EstimateLineRet ItemRef *' => array('Estimate_EstimateLine', 'Item_*'), 'EstimateRet EstimateLineRet OverrideUOMSetRef' => array(null, null), 'EstimateRet EstimateLineRet OverrideUOMSetRef *' => array('Estimate_EstimateLine', 'OverrideUOMSet_*'), 'EstimateRet EstimateLineRet ClassRef' => array(null, null), 'EstimateRet EstimateLineRet ClassRef *' => array('Estimate_EstimateLine', 'Class_*'), 'EstimateRet EstimateLineRet SalesTaxCodeRef' => array(null, null), 'EstimateRet EstimateLineRet SalesTaxCodeRef *' => array('Estimate_EstimateLine', 'SalesTaxCode_*'), 'EstimateRet EstimateLineRet DataExtRet' => array('DataExt', null), 'EstimateRet EstimateLineRet DataExtRet *' => array('DataExt', '*'), 'EstimateRet EstimateLineRet *' => array('Estimate_EstimateLine', '*'), 'EstimateRet EstimateLineGroupRet' => array(null, null), 'EstimateRet EstimateLineGroupRet Desc' => array('Estimate_EstimateLineGroup', 'Descrip'), 'EstimateRet EstimateLineGroupRet ItemGroupRef' => array(null, null), 'EstimateRet EstimateLineGroupRet ItemGroupRef *' => array('Estimate_EstimateLineGroup', 'ItemGroup_*'), 'EstimateRet EstimateLineGroupRet OverrideUOMSetRef' => array(null, null), 'EstimateRet EstimateLineGroupRet OverrideUOMSetRef *' => array('Estimate_EstimateLineGroup', 'OverrideUOMSet_*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet ItemRef' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet ItemRef *' => array('Estimate_EstimateLineGroup_EstimateLine', 'Item_*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet Desc' => array('Estimate_EstimateLineGroup_EstimateLine', 'Descrip'), 'EstimateRet EstimateLineGroupRet EstimateLineRet OverrideUOMSetRef' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet OverrideUOMSetRef *' => array('Estimate_EstimateLineGroup_EstimateLine', 'OverrideUOMSet_*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet ClassRef' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet ClassRef *' => array('Estimate_EstimateLineGroup_EstimateLine', 'Class_*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet SalesTaxCodeRef' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet SalesTaxCodeRef *' => array('Estimate_EstimateLineGroup_EstimateLine', 'SalesTaxCode_*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet DataExtRet' => array(null, null), 'EstimateRet EstimateLineGroupRet EstimateLineRet DataExtRet *' => array('DataExt', '*'), 'EstimateRet EstimateLineGroupRet EstimateLineRet *' => array('Estimate_EstimateLineGroup_EstimateLine', '*'), 'EstimateRet EstimateLineGroupRet DataExtRet' => array(null, null), 'EstimateRet EstimateLineGroupRet DataExtRet *' => array('DataExt', '*'), 'EstimateRet EstimateLineGroupRet *' => array('Estimate_EstimateLineGroup', '*'), 'EstimateRet DataExtRet' => array(null, null), 'EstimateRet DataExtRet *' => array('DataExt', '*'), 'EstimateRet *' => array('Estimate', '*'), 'InventoryAdjustmentRet' => array('InventoryAdjustment', null), 'InventoryAdjustmentRet AccountRef' => array(null, null), 'InventoryAdjustmentRet AccountRef *' => array('InventoryAdjustment', 'Account_*'), 'InventoryAdjustmentRet CustomerRef' => array(null, null), 'InventoryAdjustmentRet CustomerRef *' => array('InventoryAdjustment', 'Customer_*'), 'InventoryAdjustmentRet ClassRef' => array(null, null), 'InventoryAdjustmentRet ClassRef *' => array('InventoryAdjustment', 'Class_*'), 'InventoryAdjustmentRet InventoryAdjustmentLineRet' => array(null, null), 'InventoryAdjustmentRet InventoryAdjustmentLineRet ItemRef' => array(null, null), 'InventoryAdjustmentRet InventoryAdjustmentLineRet ItemRef *' => array('InventoryAdjustment_InventoryAdjustmentLine', 'Item_*'), 'InventoryAdjustmentRet InventoryAdjustmentLineRet *' => array('InventoryAdjustment_InventoryAdjustmentLine', '*'), 'InventoryAdjustmentRet DataExtRet' => array(null, null), 'InventoryAdjustmentRet DataExtRet *' => array('DataExt', '*'), 'InventoryAdjustmentRet *' => array('InventoryAdjustment', '*'), 'InvoiceRet' => array('Invoice', null), 'InvoiceRet CustomerRef' => array(null, null), 'InvoiceRet CustomerRef *' => array('Invoice', 'Customer_*'), 'InvoiceRet ARAccountRef' => array(null, null), 'InvoiceRet ARAccountRef *' => array('Invoice', 'ARAccount_*'), 'InvoiceRet ClassRef' => array(null, null), 'InvoiceRet ClassRef *' => array('Invoice', 'Class_*'), 'InvoiceRet TemplateRef' => array(null, null), 'InvoiceRet TemplateRef *' => array('Invoice', 'Template_*'), 'InvoiceRet BillAddress' => array('Invoice', null), 'InvoiceRet BillAddress *' => array('Invoice', 'BillAddress_*'), 'InvoiceRet ShipAddress' => array('Invoice', null), 'InvoiceRet ShipAddress *' => array('Invoice', 'ShipAddress_*'), 'InvoiceRet BillAddressBlock' => array('Invoice', null), 'InvoiceRet BillAddressBlock *' => array('Invoice', 'BillAddressBlock_*'), 'InvoiceRet ShipAddressBlock' => array('Invoice', null), 'InvoiceRet ShipAddressBlock *' => array('Invoice', 'ShipAddressBlock_*'), 'InvoiceRet TermsRef' => array(null, null), 'InvoiceRet TermsRef *' => array('Invoice', 'Terms_*'), 'InvoiceRet ItemSalesTaxRef' => array(null, null), 'InvoiceRet ItemSalesTaxRef *' => array('Invoice', 'ItemSalesTax_*'), 'InvoiceRet ShipMethodRef' => array(null, null), 'InvoiceRet ShipMethodRef *' => array('Invoice', 'ShipMethod_*'), 'InvoiceRet SalesRepRef' => array(null, null), 'InvoiceRet SalesRepRef *' => array('Invoice', 'SalesRep_*'), 'InvoiceRet CustomerMsgRef' => array(null, null), 'InvoiceRet CustomerMsgRef *' => array('Invoice', 'CustomerMsg_*'), 'InvoiceRet CustomerSalesTaxCodeRef' => array(null, null), 'InvoiceRet CustomerSalesTaxCodeRef *' => array('Invoice', 'CustomerSalesTaxCode_*'), 'InvoiceRet LinkedTxn' => array('Invoice_LinkedTxn', null), 'InvoiceRet LinkedTxn TxnID' => array('Invoice_LinkedTxn', 'ToTxnID'), 'InvoiceRet LinkedTxn *' => array('Invoice_LinkedTxn', '*'), 'InvoiceRet InvoiceLineRet' => array(null, null), 'InvoiceRet InvoiceLineRet ItemRef' => array(null, null), 'InvoiceRet InvoiceLineRet ItemRef *' => array('Invoice_InvoiceLine', 'Item_*'), 'InvoiceRet InvoiceLineRet OverrideUOMSetRef' => array(null, null), 'InvoiceRet InvoiceLineRet OverrideUOMSetRef *' => array('Invoice_InvoiceLine', 'OverrideUOMSet_*'), 'InvoiceRet InvoiceLineRet ClassRef' => array(null, null), 'InvoiceRet InvoiceLineRet ClassRef *' => array('Invoice_InvoiceLine', 'Class_*'), 'InvoiceRet InvoiceLineRet SalesTaxCodeRef' => array(null, null), 'InvoiceRet InvoiceLineRet SalesTaxCodeRef *' => array('Invoice_InvoiceLine', 'SalesTaxCode_*'), 'InvoiceRet InvoiceLineRet Desc' => array('Invoice_InvoiceLine', 'Descrip'), 'InvoiceRet InvoiceLineRet DataExtRet' => array('DataExt', null), 'InvoiceRet InvoiceLineRet DataExtRet *' => array('DataExt', '*'), 'InvoiceRet InvoiceLineRet *' => array('Invoice_InvoiceLine', '*'), 'InvoiceRet InvoiceLineGroupRet' => array(null, null), 'InvoiceRet InvoiceLineGroupRet ItemGroupRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet ItemGroupRef *' => array('Invoice_InvoiceLineGroup', 'ItemGroup_*'), 'InvoiceRet InvoiceLineGroupRet OverrideUOMSetRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet OverrideUOMSetRef *' => array('Invoice_InvoiceLineGroup', 'OverrideUOMSet_*'), 'InvoiceRet InvoiceLineGroupRet Desc' => array('Invoice_InvoiceLineGroup', 'Descrip'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet ItemRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet ItemRef *' => array('Invoice_InvoiceLineGroup_InvoiceLine', 'Item_*'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet Desc' => array('Invoice_InvoiceLineGroup_InvoiceLine', 'Descrip'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet OverrideUOMSetRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet OverrideUOMSetRef *' => array('Invoice_InvoiceLineGroup_InvoiceLine', 'OverrideUOMSet_*'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet ClassRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet ClassRef *' => array('Invoice_InvoiceLineGroup_InvoiceLine', 'Class_*'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet SalesTaxCodeRef' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet SalesTaxCodeRef *' => array('Invoice_InvoiceLineGroup_InvoiceLine', 'SalesTaxCode_*'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet DataExtRet' => array(null, null), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet DataExtRet *' => array('DataExt', '*'), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet *' => array('Invoice_InvoiceLineGroup_InvoiceLine', '*'), 'InvoiceRet InvoiceLineGroupRet DataExtRet' => array(null, null), 'InvoiceRet InvoiceLineGroupRet DataExtRet *' => array('DataExt', '*'), 'InvoiceRet InvoiceLineGroupRet *' => array('Invoice_InvoiceLineGroup', '*'), 'InvoiceRet DataExtRet' => array(null, null), 'InvoiceRet DataExtRet *' => array('DataExt', '*'), 'InvoiceRet *' => array('Invoice', '*'), 'ItemDiscountRet' => array('ItemDiscount', null), 'ItemDiscountRet ParentRef' => array(null, null), 'ItemDiscountRet ParentRef *' => array('ItemDiscount', 'Parent_*'), 'ItemDiscountRet SalesTaxCodeRef' => array(null, null), 'ItemDiscountRet SalesTaxCodeRef *' => array('ItemDiscount', 'SalesTaxCode_*'), 'ItemDiscountRet AccountRef' => array(null, null), 'ItemDiscountRet AccountRef *' => array('ItemDiscount', 'Account_*'), 'ItemDiscountRet DataExtRet' => array(null, null), 'ItemDiscountRet DataExtRet *' => array('DataExt', '*'), 'ItemDiscountRet *' => array('ItemDiscount', '*'), 'ItemServiceRet' => array('ItemService', null), 'ItemServiceRet ParentRef' => array(null, null), 'ItemServiceRet ParentRef *' => array('ItemService', 'Parent_*'), 'ItemServiceRet UnitOfMeasureSetRef' => array(null, null), 'ItemServiceRet UnitOfMeasureSetRef *' => array('ItemService', 'UnitOfMeasureSet_*'), 'ItemServiceRet SalesTaxCodeRef' => array(null, null), 'ItemServiceRet SalesTaxCodeRef *' => array('ItemService', 'SalesTaxCode_*'), 'ItemServiceRet SalesOrPurchase' => array(null, null), 'ItemServiceRet SalesOrPurchase AccountRef' => array(null, null), 'ItemServiceRet SalesOrPurchase AccountRef *' => array('ItemService', 'SalesOrPurchase_Account_*'), 'ItemServiceRet SalesOrPurchase *' => array('ItemService', 'SalesOrPurchase_*'), 'ItemServiceRet SalesAndPurchase' => array(null, null), 'ItemServiceRet SalesAndPurchase IncomeAccountRef' => array(null, null), 'ItemServiceRet SalesAndPurchase IncomeAccountRef *' => array('ItemService', 'SalesAndPurchase_IncomeAccount_*'), 'ItemServiceRet SalesAndPurchase ExpenseAccountRef' => array(null, null), 'ItemServiceRet SalesAndPurchase ExpenseAccountRef *' => array('ItemService', 'SalesAndPurchase_ExpenseAccount_*'), 'ItemServiceRet SalesAndPurchase PrefVendorRef' => array(null, null), 'ItemServiceRet SalesAndPurchase PrefVendorRef *' => array('ItemService', 'SalesAndPurchase_PrefVendor_*'), 'ItemServiceRet SalesAndPurchase *' => array('ItemService', 'SalesAndPurchase_*'), 'ItemServiceRet DataExtRet' => array(null, null), 'ItemServiceRet DataExtRet *' => array('DataExt', '*'), 'ItemServiceRet *' => array('ItemService', '*'), 'ItemNonInventoryRet' => array('ItemNonInventory', null), 'ItemNonInventoryRet ParentRef' => array(null, null), 'ItemNonInventoryRet ParentRef *' => array('ItemNonInventory', 'Parent_*'), 'ItemNonInventoryRet UnitOfMeasureRef' => array(null, null), 'ItemNonInventoryRet UnitOfMeasureRef *' => array('itemnoninventory', 'UnitOfMeasure_*'), 'ItemNonInventoryRet SalesTaxCodeRef' => array(null, null), 'ItemNonInventoryRet SalesTaxCodeRef' => array('itemnoninventory', 'SalesTaxCode_*'), 'ItemNonInventoryRet UnitOfMeasureSetRef' => array(null, null), 'ItemNonInventoryRet UnitOfMeasureSetRef *' => array('ItemNonInventory', 'UnitOfMeasureSet_*'), 'ItemNonInventoryRet SalesTaxCodeRef' => array(null, null), 'ItemNonInventoryRet SalesTaxCodeRef *' => array('ItemNonInventory', 'SalesTaxCode_*'), 'ItemNonInventoryRet SalesOrPurchase' => array(null, null), 'ItemNonInventoryRet SalesOrPurchase *' => array('ItemNonInventory', 'SalesOrPurchase_*'), 'ItemNonInventoryRet SalesOrPurchase AccountRef' => array(null, null), 'ItemNonInventoryRet SalesOrPurchase AccountRef *' => array('ItemNonInventory', 'SalesOrPurchase_Account_*'), 'ItemNonInventoryRet SalesAndPurchase' => array(null, null), 'ItemNonInventoryRet SalesAndPurchase IncomeAccountRef' => array(null, null), 'ItemNonInventoryRet SalesAndPurchase IncomeAccountRef *' => array('ItemNonInventory', 'SalesAndPurchase_IncomeAccount_*'), 'ItemNonInventoryRet SalesAndPurchase ExpenseAccountRef' => array(null, null), 'ItemNonInventoryRet SalesAndPurchase ExpenseAccountRef *' => array('ItemNonInventory', 'SalesAndPurchase_ExpenseAccount_*'), 'ItemNonInventoryRet SalesAndPurchase PrefVendorRef' => array(null, null), 'ItemNonInventoryRet SalesAndPurchase PrefVendorRef *' => array('ItemNonInventory', 'SalesAndPurchase_PrefVendor_*'), 'ItemNonInventoryRet SalesAndPurchase *' => array('ItemNonInventory', 'SalesAndPurchase_*'), 'ItemNonInventoryRet DataExtRet' => array(null, null), 'ItemNonInventoryRet DataExtRet *' => array('DataExt', '*'), 'ItemNonInventoryRet *' => array('ItemNonInventory', '*'), 'ItemOtherChargeRet' => array('ItemOtherCharge', null), 'ItemOtherChargeRet ParentRef' => array(null, null), 'ItemOtherChargeRet ParentRef *' => array('ItemOtherCharge', 'Parent_*'), 'ItemOtherChargeRet SalesTaxCodeRef' => array(null, null), 'ItemOtherChargeRet SalesTaxCodeRef *' => array('ItemOtherCharge', 'SalesTaxCode_*'), 'ItemOtherChargeRet SalesOrPurchase' => array(null, null), 'ItemOtherChargeRet SalesOrPurchase *' => array('ItemOtherCharge', 'SalesOrPurchase_*'), 'ItemOtherChargeRet SalesOrPurchase AccountRef' => array(null, null), 'ItemOtherChargeRet SalesOrPurchase AccountRef *' => array('ItemOtherCharge', 'SalesOrPurchase_Account_*'), 'ItemOtherChargeRet SalesAndPurchase' => array(null, null), 'ItemOtherChargeRet SalesAndPurchase IncomeAccountRef' => array(null, null), 'ItemOtherChargeRet SalesAndPurchase IncomeAccountRef *' => array('ItemOtherCharge', 'SalesAndPurchase_IncomeAccount_*'), 'ItemOtherChargeRet SalesAndPurchase ExpenseAccountRef' => array(null, null), 'ItemOtherChargeRet SalesAndPurchase ExpenseAccountRef *' => array('ItemOtherCharge', 'SalesAndPurchase_ExpenseAccount_*'), 'ItemOtherChargeRet SalesAndPurchase PrefVendorRef' => array(null, null), 'ItemOtherChargeRet SalesAndPurchase PrefVendorRef *' => array('ItemOtherCharge', 'SalesAndPurchase_PrefVendor_*'), 'ItemOtherChargeRet SalesAndPurchase *' => array('ItemOtherCharge', 'SalesAndPurchase_*'), 'ItemOtherChargeRet DataExtRet' => array(null, null), 'ItemOtherChargeRet DataExtRet *' => array('DataExt', '*'), 'ItemOtherChargeRet *' => array('ItemOtherCharge', '*'), 'ItemInventoryRet' => array('ItemInventory', null), 'ItemInventoryRet ParentRef' => array(null, null), 'ItemInventoryRet ParentRef *' => array('ItemInventory', 'Parent_*'), 'ItemInventoryRet SalesTaxCodeRef' => array(null, null), 'ItemInventoryRet SalesTaxCodeRef *' => array('ItemInventory', 'SalesTaxCode_*'), 'ItemInventoryRet UnitOfMeasureSetRef' => array(null, null), 'ItemInventoryRet UnitOfMeasureSetRef *' => array('ItemInventory', 'UnitOfMeasureSet_*'), 'ItemInventoryRet IncomeAccountRef' => array(null, null), 'ItemInventoryRet IncomeAccountRef *' => array('ItemInventory', 'IncomeAccount_*'), 'ItemInventoryRet COGSAccountRef' => array(null, null), 'ItemInventoryRet COGSAccountRef *' => array('ItemInventory', 'COGSAccount_*'), 'ItemInventoryRet PrefVendorRef' => array(null, null), 'ItemInventoryRet PrefVendorRef *' => array('ItemInventory', 'PrefVendor_*'), 'ItemInventoryRet AssetAccountRef' => array(null, null), 'ItemInventoryRet AssetAccountRef *' => array('ItemInventory', 'AssetAccount_*'), 'ItemInventoryRet DataExtRet' => array(null, null), 'ItemInventoryRet DataExtRet *' => array('DataExt', '*'), 'ItemInventoryRet *' => array('ItemInventory', '*'), 'ItemInventoryAssemblyRet' => array('ItemInventoryAssembly', null), 'ItemInventoryAssemblyRet ParentRef' => array(null, null), 'ItemInventoryAssemblyRet ParentRef *' => array('ItemInventoryAssembly', 'Parent_*'), 'ItemInventoryAssemblyRet UnitOfMeasureSetRef' => array(null, null), 'ItemInventoryAssemblyRet UnitOfMeasureSetRef *' => array('ItemInventoryAssembly', 'UnitOfMeasureSet_*'), 'ItemInventoryAssemblyRet SalesTaxCodeRef' => array(null, null), 'ItemInventoryAssemblyRet SalesTaxCodeRef *' => array('ItemInventoryAssembly', 'SalesTaxCode_*'), 'ItemInventoryAssemblyRet IncomeAccountRef' => array(null, null), 'ItemInventoryAssemblyRet IncomeAccountRef *' => array('ItemInventoryAssembly', 'IncomeAccount_*'), 'ItemInventoryAssemblyRet COGSAccountRef' => array(null, null), 'ItemInventoryAssemblyRet COGSAccountRef *' => array('ItemInventoryAssembly', 'COGSAccount_*'), 'ItemInventoryAssemblyRet PrefVendorRef' => array(null, null), 'ItemInventoryAssemblyRet PrefVendorRef *' => array('ItemInventoryAssembly', 'PrefVendor_*'), 'ItemInventoryAssemblyRet AssetAccountRef' => array(null, null), 'ItemInventoryAssemblyRet AssetAccountRef *' => array('ItemInventoryAssembly', 'AssetAccount_*'), 'ItemInventoryAssemblyRet ItemInventoryAssemblyLine' => array(null, null), 'ItemInventoryAssemblyRet ItemInventoryAssemblyLine ItemInventoryRef' => array(null, null), 'ItemInventoryAssemblyRet ItemInventoryAssemblyLine ItemInventoryRef *' => array('ItemInventoryAssembly_ItemInventoryAssemblyLine', 'ItemInventory_*'), 'ItemInventoryAssemblyRet ItemInventoryAssemblyLine *' => array('ItemInventoryAssembly_ItemInventoryAssemblyLine', '*'), 'ItemInventoryAssemblyRet DataExtRet' => array(null, null), 'ItemInventoryAssemblyRet DataExtRet *' => array('DataExt', '*'), 'ItemInventoryAssemblyRet *' => array('ItemInventoryAssembly', '*'), 'ItemFixedAssetRet' => array('ItemFixedAsset', null), 'ItemFixedAssetRet AssetAccountRef' => array(null, null), 'ItemFixedAssetRet AssetAccountRef *' => array('ItemFixedAsset', 'AssetAccount_*'), 'ItemFixedAssetRet FixedAssetSalesInfo' => array(null, null), 'ItemFixedAssetRet FixedAssetSalesInfo *' => array('ItemFixedAsset', 'FixedAssetSalesInfo_*'), 'ItemFixedAssetRet DataExtRet' => array(null, null), 'ItemFixedAssetRet DataExtRet *' => array('DataExt', '*'), 'ItemFixedAssetRet *' => array('ItemFixedAsset', '*'), 'ItemGroupRet' => array('ItemGroup', null), 'ItemGroupRet UnitOfMeasureSetRef' => array(null, null), 'ItemGroupRet UnitOfMeasureSetRef *' => array('ItemGroup', 'UnitOfMeasureSet_*'), 'ItemGroupRet ItemGroupLine' => array(null, null), 'ItemGroupRet ItemGroupLine ItemRef' => array(null, null), 'ItemGroupRet ItemGroupLine ItemRef *' => array('ItemGroup_ItemGroupLine', 'Item_*'), 'ItemGroupRet ItemGroupLine *' => array('ItemGroup_ItemGroupLine', '*'), 'ItemGroupRet DataExtRet' => array(null, null), 'ItemGroupRet DataExtRet *' => array('DataExt', '*'), 'ItemGroupRet *' => array('ItemGroup', '*'), 'ItemSubtotalRet' => array('ItemSubtotal', null), 'ItemSubtotalRet DataExtRet' => array(null, null), 'ItemSubtotalRet DataExtRet *' => array('DataExt', '*'), 'ItemSubtotalRet *' => array('ItemSubtotal', '*'), 'ItemPaymentRet' => array('ItemPayment', null), 'ItemPaymentRet DepositToAccountRef' => array(null, null), 'ItemPaymentRet DepositToAccountRef *' => array('ItemPayment', 'DepositToAccount_*'), 'ItemPaymentRet PaymentMethodRef' => array(null, null), 'ItemPaymentRet PaymentMethodRef *' => array('ItemPayment', 'PaymentMethod_*'), 'ItemPaymentRet DataExtRet' => array(null, null), 'ItemPaymentRet DataExtRet *' => array('DataExt', '*'), 'ItemPaymentRet *' => array('ItemPayment', '*'), 'ItemSalesTaxRet' => array('ItemSalesTax', null), 'ItemSalesTaxRet TaxVendorRef' => array(null, null), 'ItemSalesTaxRet TaxVendorRef *' => array('ItemSalesTax', 'TaxVendor_*'), 'ItemSalesTaxRet DataExtRet' => array(null, null), 'ItemSalesTaxRet DataExtRet *' => array('DataExt', '*'), 'ItemSalesTaxRet *' => array('ItemSalesTax', '*'), 'ItemSalesTaxGroupRet' => array('ItemSalesTaxGroup', null), 'ItemSalesTaxGroupRet ItemSalesTaxRef' => array(null, null), 'ItemSalesTaxGroupRet ItemSalesTaxRef *' => array('ItemSalesTaxGroup_ItemSalesTax', '*'), 'ItemSalesTaxGroupRet DataExtRet' => array(null, null), 'ItemSalesTaxGroupRet DataExtRet *' => array('DataExt', '*'), 'ItemSalesTaxGroupRet *' => array('ItemSalesTaxGroup', '*'), 'ItemReceiptRet' => array('ItemReceipt', null), 'ItemReceiptRet VendorRef' => array(null, null), 'ItemReceiptRet VendorRef *' => array('ItemReceipt', 'Vendor_*'), 'ItemReceiptRet APAccountRef' => array(null, null), 'ItemReceiptRet APAccountRef *' => array('ItemReceipt', 'APAccount_*'), 'ItemReceiptRet LinkedTxn' => array('ItemReceipt_LinkedTxn', null), 'ItemReceiptRet LinkedTxn TxnID' => array('ItemReceipt_LinkedTxn', 'ToTxnID'), 'ItemReceiptRet LinkedTxn *' => array('ItemReceipt_LinkedTxn', '*'), 'ItemReceiptRet ExpenseLineRet' => array('ItemReceipt_ExpenseLine', null), 'ItemReceiptRet ExpenseLineRet AccountRef' => array(null, null), 'ItemReceiptRet ExpenseLineRet AccountRef *' => array('ItemReceipt_ExpenseLine', 'Account_*'), 'ItemReceiptRet ExpenseLineRet CustomerRef' => array(null, null), 'ItemReceiptRet ExpenseLineRet CustomerRef *' => array('ItemReceipt_ExpenseLine', 'Customer_*'), 'ItemReceiptRet ExpenseLineRet ClassRef' => array(null, null), 'ItemReceiptRet ExpenseLineRet ClassRef *' => array('ItemReceipt_ExpenseLine', 'Class_*'), 'ItemReceiptRet ExpenseLineRet *' => array('ItemReceipt_ExpenseLine', '*'), 'ItemReceiptRet ItemLineRet' => array('ItemReceipt_ItemLine', null), 'ItemReceiptRet ItemLineRet Desc' => array('ItemReceipt_ItemLine', 'Descrip'), 'ItemReceiptRet ItemLineRet ItemRef' => array(null, null), 'ItemReceiptRet ItemLineRet ItemRef *' => array('ItemReceipt_ItemLine', 'Item_*'), 'ItemReceiptRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'ItemReceiptRet ItemLineRet OverrideUOMSetRef *' => array('ItemReceipt_ItemLine', 'OverrideUOMSet_*'), 'ItemReceiptRet ItemLineRet CustomerRef' => array(null, null), 'ItemReceiptRet ItemLineRet CustomerRef *' => array('ItemReceipt_ItemLine', 'Customer_*'), 'ItemReceiptRet ItemLineRet ClassRef' => array(null, null), 'ItemReceiptRet ItemLineRet ClassRef *' => array('ItemReceipt_ItemLine', 'Class_*'), 'ItemReceiptRet ItemLineRet *' => array('ItemReceipt_ItemLine', '*'), 'ItemReceiptRet ItemGroupLineRet' => array('ItemReceipt_ItemGroupLine', null), 'ItemReceiptRet ItemGroupLineRet Desc' => array('ItemReceipt_ItemGroupLine', 'Descrip'), 'ItemReceiptRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemGroupRef *' => array('ItemReceipt_ItemGroupLine', 'ItemGroup_*'), 'ItemReceiptRet ItemGroupLineRet OverrideUOMSetRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet OverrideUOMSetRef *' => array('ItemReceipt_ItemGroupLine', 'OverrideUOMSet_*'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemLineRet ItemRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemLineRet ItemRef *' => array('ItemReceipt_ItemGroupLine_ItemLine', 'Item_*'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet Desc' => array('ItemReceipt_ItemGroupLine_ItemLine', 'Descrip'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef *' => array('ItemReceipt_ItemGroupLine_ItemLine', 'OverrideUOMSet_*'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet CustomerRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemLineRet CustomerRef *' => array('ItemReceipt_ItemGroupLine_ItemLine', 'Customer_*'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet ClassRef' => array(null, null), 'ItemReceiptRet ItemGroupLineRet ItemLineRet ClassRef *' => array('ItemReceipt_ItemGroupLine_ItemLine', 'Class_*'), 'ItemReceiptRet ItemGroupLineRet ItemLineRet *' => array('ItemReceipt_ItemGroupLine_ItemLine', '*'), 'ItemReceiptRet ItemGroupLineRet *' => array('ItemReceipt_ItemGroupLine', '*'), 'ItemReceiptRet DataExtRet' => array(null, null), 'ItemReceiptRet DataExtRet *' => array('DataExt', '*'), 'ItemReceiptRet *' => array('ItemReceipt', '*'), 'JobTypeRet' => array('JobType', null), 'JobTypeRet ParentRef' => array(null, null), 'JobTypeRet ParentRef *' => array('JobType', 'Parent_*'), 'JobTypeRet *' => array('JobType', '*'), 'JournalEntryRet' => array('JournalEntry', null), 'JournalEntryRet JournalDebitLine' => array(null, null), 'JournalEntryRet JournalDebitLine AccountRef' => array(null, null), 'JournalEntryRet JournalDebitLine AccountRef *' => array('JournalEntry_JournalDebitLine', 'Account_*'), 'JournalEntryRet JournalDebitLine EntityRef' => array(null, null), 'JournalEntryRet JournalDebitLine EntityRef *' => array('JournalEntry_JournalDebitLine', 'Entity_*'), 'JournalEntryRet JournalDebitLine ClassRef' => array(null, null), 'JournalEntryRet JournalDebitLine ClassRef *' => array('JournalEntry_JournalDebitLine', 'Class_*'), 'JournalEntryRet JournalDebitLine *' => array('JournalEntry_JournalDebitLine', '*'), 'JournalEntryRet JournalCreditLine' => array(null, null), 'JournalEntryRet JournalCreditLine AccountRef' => array(null, null), 'JournalEntryRet JournalCreditLine AccountRef *' => array('JournalEntry_JournalCreditLine', 'Account_*'), 'JournalEntryRet JournalCreditLine EntityRef' => array(null, null), 'JournalEntryRet JournalCreditLine EntityRef *' => array('JournalEntry_JournalCreditLine', 'Entity_*'), 'JournalEntryRet JournalCreditLine ClassRef' => array(null, null), 'JournalEntryRet JournalCreditLine ClassRef *' => array('JournalEntry_JournalCreditLine', 'Class_*'), 'JournalEntryRet JournalCreditLine *' => array('JournalEntry_JournalCreditLine', '*'), 'JournalEntryRet DataExtRet' => array(null, null), 'JournalEntryRet DataExtRet *' => array('DataExt', '*'), 'JournalEntryRet *' => array('JournalEntry', '*'), 'PaymentMethodRet' => array('PaymentMethod', null), 'PaymentMethodRet *' => array('PaymentMethod', '*'), 'PayrollItemWageRet' => array('PayrollItemWage', null), 'PayrollItemWageRet ExpenseAccountRef' => array(null, null), 'PayrollItemWageRet ExpenseAccountRef *' => array('PayrollItemWage', 'ExpenseAccount_*'), 'PayrollItemWageRet *' => array('PayrollItemWage', '*'), 'PriceLevelRet' => array('PriceLevel', null), 'PriceLevelRet PriceLevelPerItemRet' => array(null, null), 'PriceLevelRet PriceLevelPerItemRet ItemRef' => array(null, null), 'PriceLevelRet PriceLevelPerItemRet ItemRef *' => array('PriceLevel_PriceLevelPerItem', 'Item_*'), 'PriceLevelRet PriceLevelPerItemRet *' => array('PriceLevel_PriceLevelPerItem', '*'), 'PriceLevelRet *' => array('PriceLevel', '*'), 'PurchaseOrderRet' => array('PurchaseOrder', null), 'PurchaseOrderRet VendorRef' => array(null, null), 'PurchaseOrderRet VendorRef *' => array('PurchaseOrder', 'Vendor_*'), 'PurchaseOrderRet VendorRef FullName' => array('PurchaseOrder', 'Vendor_FullName'), 'PurchaseOrderRet ClassRef' => array(null, null), 'PurchaseOrderRet ClassRef *' => array('PurchaseOrder', 'Class_*'), 'PurchaseOrderRet ShipToEntityRef' => array(null, null), 'PurchaseOrderRet ShipToEntityRef *' => array('PurchaseOrder', 'ShipToEntity_*'), 'PurchaseOrderRet ShipToEntityRef FullName' => array('PurchaseOrder', 'ShipToEntity_FullName'), 'PurchaseOrderRet TemplateRef' => array(null, null), 'PurchaseOrderRet TemplateRef *' => array('PurchaseOrder', 'Template_*'), 'PurchaseOrderRet VendorAddress' => array('PurchaseOrder', null), 'PurchaseOrderRet VendorAddress *' => array('PurchaseOrder', 'VendorAddress_*'), 'PurchaseOrderRet VendorAddressBlock' => array('PurchaseOrder', null), 'PurchaseOrderRet VendorAddressBlock *' => array('PurchaseOrder', 'VendorAddressBlock_*'), 'PurchaseOrderRet ShipAddress' => array('PurchaseOrder', null), 'PurchaseOrderRet ShipAddress *' => array('PurchaseOrder', 'ShipAddress_*'), 'PurchaseOrderRet ShipAddressBlock' => array('PurchaseOrder', null), 'PurchaseOrderRet ShipAddressBlock *' => array('PurchaseOrder', 'ShipAddressBlock_*'), 'PurchaseOrderRet TermsRef' => array(null, null), 'PurchaseOrderRet TermsRef *' => array('PurchaseOrder', 'Terms_*'), 'PurchaseOrderRet ShipMethodRef' => array(null, null), 'PurchaseOrderRet ShipMethodRef *' => array('PurchaseOrder', 'ShipMethod_*'), 'PurchaseOrderRet PurchaseOrderLineRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet ItemRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet ItemRef *' => array('PurchaseOrder_PurchaseOrderLine', 'Item_*'), 'PurchaseOrderRet PurchaseOrderLineRet OverrideUOMSetRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet OverrideUOMSetRef *' => array('PurchaseOrder_PurchaseOrderLine', 'OverrideUOMSet_*'), 'PurchaseOrderRet PurchaseOrderLineRet ClassRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet ClassRef *' => array('PurchaseOrder_PurchaseOrderLine', 'Class_*'), 'PurchaseOrderRet PurchaseOrderLineRet CustomerRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet CustomerRef *' => array('PurchaseOrder_PurchaseOrderLine', 'Customer_*'), 'PurchaseOrderRet PurchaseOrderLineRet Desc' => array('PurchaseOrder_PurchaseOrderLine', 'Descrip'), 'PurchaseOrderRet PurchaseOrderLineRet DataExtRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineRet DataExtRet *' => array('DataExt', '*'), 'PurchaseOrderRet PurchaseOrderLineRet *' => array('PurchaseOrder_PurchaseOrderLine', '*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet ItemGroupRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet ItemGroupRef *' => array('PurchaseOrder_PurchaseOrderLineGroup', 'ItemGroup_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet OverrideUOMSetRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet OverrideUOMSetRef *' => array('PurchaseOrder_PurchaseOrderLineGroup', 'OverrideUOMSet_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet Desc' => array('PurchaseOrder_PurchaseOrderLineGroup', 'Descrip'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet ItemRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet ItemRef *' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'Item_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet Desc' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'Descrip'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet OverrideUOMSetRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet OverrideUOMSetRef *' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'OverrideUOMSet_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet ClassRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet ClassRef *' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'Class_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet CustomerRef' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet CustomerRef *' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'Customer_*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet DataExtRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet DataExtRet *' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet DataExtRet *' => array('DataExt', '*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet *' => array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', '*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet DataExtRet' => array(null, null), 'PurchaseOrderRet PurchaseOrderLineGroupRet DataExtRet *' => array('DataExt', '*'), 'PurchaseOrderRet PurchaseOrderLineGroupRet *' => array('PurchaseOrder_PurchaseOrderLineGroup', '*'), 'PurchaseOrderRet DataExtRet' => array(null, null), 'PurchaseOrderRet DataExtRet *' => array('DataExt', '*'), 'PurchaseOrderRet LinkedTxn' => array(null, null), 'PurchaseOrderRet LinkedTxn TxnID' => array('PurchaseOrder_LinkedTxn', 'ToTxnID'), 'PurchaseOrderRet LinkedTxn *' => array('PurchaseOrder_LinkedTxn', '*'), 'PurchaseOrderRet *' => array('PurchaseOrder', '*'), 'ReceivePaymentRet' => array('ReceivePayment', null), 'ReceivePaymentRet CustomerRef' => array(null, null), 'ReceivePaymentRet CustomerRef *' => array('ReceivePayment', 'Customer_*'), 'ReceivePaymentRet ARAccountRef' => array(null, null), 'ReceivePaymentRet ARAccountRef *' => array('ReceivePayment', 'ARAccount_*'), 'ReceivePaymentRet PaymentMethodRef' => array(null, null), 'ReceivePaymentRet PaymentMethodRef *' => array('ReceivePayment', 'PaymentMethod_*'), 'ReceivePaymentRet DepositToAccountRef' => array(null, null), 'ReceivePaymentRet DepositToAccountRef *' => array('ReceivePayment', 'DepositToAccount_*'), 'ReceivePaymentRet CreditCardTxnInfo' => array(null, null), 'ReceivePaymentRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'ReceivePaymentRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('ReceivePayment', 'CreditCardTxnInfo_CreditCardTxnInputInfo_*'), 'ReceivePaymentRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'ReceivePaymentRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('ReceivePayment', 'CreditCardTxnInfo_CreditCardTxnResultInfo_*'), 'ReceivePaymentRet AppliedToTxnRet' => array(null, null), 'ReceivePaymentRet AppliedToTxnRet TxnID' => array('ReceivePayment_AppliedToTxn', 'ToTxnID'), 'ReceivePaymentRet AppliedToTxnRet DiscountAccountRef' => array(null, null), 'ReceivePaymentRet AppliedToTxnRet DiscountAccountRef *' => array('ReceivePayment_AppliedToTxn', 'DiscountAccount_*'), 'ReceivePaymentRet AppliedToTxnRet *' => array('ReceivePayment_AppliedToTxn', '*'), 'ReceivePaymentRet DataExtRet' => array(null, null), 'ReceivePaymentRet DataExtRet *' => array('DataExt', '*'), 'ReceivePaymentRet *' => array('ReceivePayment', '*'), 'SalesOrderRet' => array('SalesOrder', null), 'SalesOrderRet CustomerRef' => array(null, null), 'SalesOrderRet CustomerRef *' => array('SalesOrder', 'Customer_*'), 'SalesOrderRet ClassRef' => array(null, null), 'SalesOrderRet ClassRef *' => array('SalesOrder', 'Class_*'), 'SalesOrderRet TemplateRef' => array(null, null), 'SalesOrderRet TemplateRef *' => array('SalesOrder', 'Template_*'), 'SalesOrderRet BillAddress' => array(null, null), 'SalesOrderRet BillAddress *' => array('SalesOrder', 'BillAddress_*'), 'SalesOrderRet BillAddressBlock' => array(null, null), 'SalesOrderRet BillAddressBlock *' => array('SalesOrder', 'BillAddressBlock_*'), 'SalesOrderRet ShipAddress' => array(null, null), 'SalesOrderRet ShipAddress *' => array('SalesOrder', 'ShipAddress_*'), 'SalesOrderRet ShipAddressBlock' => array(null, null), 'SalesOrderRet ShipAddressBlock *' => array('SalesOrder', 'ShipAddressBlock_*'), 'SalesOrderRet TermsRef' => array(null, null), 'SalesOrderRet TermsRef *' => array('SalesOrder', 'Terms_*'), 'SalesOrderRet SalesRepRef' => array(null, null), 'SalesOrderRet SalesRepRef *' => array('SalesOrder', 'SalesRep_*'), 'SalesOrderRet ShipMethodRef' => array(null, null), 'SalesOrderRet ShipMethodRef *' => array('SalesOrder', 'ShipMethod_*'), 'SalesOrderRet ItemSalesTaxRef' => array(null, null), 'SalesOrderRet ItemSalesTaxRef *' => array('SalesOrder', 'ItemSalesTax_*'), 'SalesOrderRet CustomerMsgRef' => array(null, null), 'SalesOrderRet CustomerMsgRef *' => array('SalesOrder', 'CustomerMsg_*'), 'SalesOrderRet CustomerSalesTaxCodeRef' => array(null, null), 'SalesOrderRet CustomerSalesTaxCodeRef *' => array('SalesOrder', 'CustomerSalesTaxCode_*'), 'SalesOrderRet LinkedTxn' => array('SalesOrder_LinkedTxn', null), 'SalesOrderRet LinkedTxn TxnID' => array('SalesOrder_LinkedTxn', 'ToTxnID'), 'SalesOrderRet LinkedTxn *' => array('SalesOrder_LinkedTxn', '*'), 'SalesOrderRet SalesOrderLineRet' => array('SalesOrder_SalesOrderLine', null), 'SalesOrderRet SalesOrderLineRet Desc' => array('SalesOrder_SalesOrderLine', 'Descrip'), 'SalesOrderRet SalesOrderLineRet ItemRef' => array(null, null), 'SalesOrderRet SalesOrderLineRet ItemRef *' => array('SalesOrder_SalesOrderLine', 'Item_*'), 'SalesOrderRet SalesOrderLineRet OverrideUOMSetRef' => array(null, null), 'SalesOrderRet SalesOrderLineRet OverrideUOMSetRef *' => array('SalesOrder_SalesOrderLine', 'OverrideUOMSet_*'), 'SalesOrderRet SalesOrderLineRet ClassRef' => array(null, null), 'SalesOrderRet SalesOrderLineRet ClassRef *' => array('SalesOrder_SalesOrderLine', 'Class_*'), 'SalesOrderRet SalesOrderLineRet SalesTaxCodeRef' => array(null, null), 'SalesOrderRet SalesOrderLineRet SalesTaxCodeRef *' => array('SalesOrder_SalesOrderLine', 'SalesTaxCode_*'), 'SalesOrderRet SalesOrderLineRet DataExtRet' => array(null, null), 'SalesOrderRet SalesOrderLineRet DataExtRet *' => array('DataExt', '*'), 'SalesOrderRet SalesOrderLineRet *' => array('SalesOrder_SalesOrderLine', '*'), 'SalesOrderRet SalesOrderLineGroupRet' => array('SalesOrder_SalesOrderLineGroup', null), 'SalesOrderRet SalesOrderLineGroupRet Desc' => array('SalesOrder_SalesOrderLineGroup', 'Descrip'), 'SalesOrderRet SalesOrderLineGroupRet ItemGroupRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet ItemGroupRef *' => array('SalesOrder_SalesOrderLineGroup', 'ItemGroup_*'), 'SalesOrderRet SalesOrderLineGroupRet OverrideUOMSetRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet OverrideUOMSetRef *' => array('SalesOrder_SalesOrderLineGroup', 'OverrideUOMSet_*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet ItemRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet ItemRef *' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'Item_*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet Desc' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'Descrip'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet OverrideUOMSetRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet OverrideUOMSetRef *' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'OverrideUOMSet_*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet SalesTaxCodeRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet SalesTaxCodeRef *' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'SalesTaxCode_*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet ClassRef' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet ClassRef *' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'Class_*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet DataExtRet' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet DataExtRet *' => array('DataExt', '*'), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet *' => array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', '*'), 'SalesOrderRet SalesOrderLineGroupRet DataExtRet' => array(null, null), 'SalesOrderRet SalesOrderLineGroupRet DataExtRet *' => array('DataExt', '*'), 'SalesOrderRet SalesOrderLineGroupRet *' => array('SalesOrder_SalesOrderLineGroup', '*'), 'SalesOrderRet DataExtRet' => array(null, null), 'SalesOrderRet DataExtRet *' => array('DataExt', '*'), 'SalesOrderRet *' => array('SalesOrder', '*'), 'SalesReceiptRet' => array('SalesReceipt', null), 'SalesReceiptRet CustomerRef' => array(null, null), 'SalesReceiptRet CustomerRef *' => array('SalesReceipt', 'Customer_*'), 'SalesReceiptRet ClassRef' => array(null, null), 'SalesReceiptRet ClassRef *' => array('SalesReceipt', 'Class_*'), 'SalesReceiptRet TemplateRef' => array(null, null), 'SalesReceiptRet TemplateRef *' => array('SalesReceipt', 'Template_*'), 'SalesReceiptRet BillAddressBlock' => array(null, null), 'SalesReceiptRet BillAddressBlock *' => array('SalesReceipt', 'BillAddressBlock_*'), 'SalesReceiptRet BillAddress' => array(null, null), 'SalesReceiptRet BillAddress *' => array('SalesReceipt', 'BillAddress_*'), 'SalesReceiptRet ShipAddressBlock' => array(null, null), 'SalesReceiptRet ShipAddressBlock *' => array('SalesReceipt', 'ShipAddressBlock_*'), 'SalesReceiptRet ShipAddress' => array(null, null), 'SalesReceiptRet ShipAddress *' => array('SalesReceipt', 'ShipAddress_*'), 'SalesReceiptRet PaymentMethodRef' => array(null, null), 'SalesReceiptRet PaymentMethodRef *' => array('SalesReceipt', 'PaymentMethod_*'), 'SalesReceiptRet SalesRepRef' => array(null, null), 'SalesReceiptRet SalesRepRef *' => array('SalesReceipt', 'SalesRep_*'), 'SalesReceiptRet ShipMethodRef' => array(null, null), 'SalesReceiptRet ShipMethodRef *' => array('SalesReceipt', 'ShipMethod_*'), 'SalesReceiptRet ItemSalesTaxRef' => array(null, null), 'SalesReceiptRet ItemSalesTaxRef *' => array('SalesReceipt', 'ItemSalesTax_*'), 'SalesReceiptRet CustomerMsgRef' => array(null, null), 'SalesReceiptRet CustomerMsgRef *' => array('SalesReceipt', 'CustomerMsg_*'), 'SalesReceiptRet CustomerSalesTaxCodeRef' => array(null, null), 'SalesReceiptRet CustomerSalesTaxCodeRef *' => array('SalesReceipt', 'CustomerSalesTaxCode_*'), 'SalesReceiptRet DepositToAccountRef' => array(null, null), 'SalesReceiptRet DepositToAccountRef *' => array('SalesReceipt', 'DepositToAccount_*'), 'SalesReceiptRet CreditCardTxnInfo' => array(null, null), 'SalesReceiptRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'SalesReceiptRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('SalesReceipt', 'CreditCardTxnInputInfo_*'), 'SalesReceiptRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'SalesReceiptRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('SalesReceipt', 'CreditCardTxnResultInfo_*'), 'SalesReceiptRet CreditCardTxnInfo *' => array('SalesReceipt', 'CreditCardTxnInfo_*'), 'SalesReceiptRet SalesReceiptLineRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet Desc' => array('SalesReceipt_SalesReceiptLine', 'Descrip'), 'SalesReceiptRet SalesReceiptLineRet ItemRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet ItemRef *' => array('SalesReceipt_SalesReceiptLine', 'Item_*'), 'SalesReceiptRet SalesReceiptLineRet OverrideUOMSetRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet OverrideUOMSetRef *' => array('SalesReceipt_SalesReceiptLine', 'OverrideUOMSet_*'), 'SalesReceiptRet SalesReceiptLineRet ClassRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet ClassRef *' => array('SalesReceipt_SalesReceiptLine', 'Class_*'), 'SalesReceiptRet SalesReceiptLineRet SalesTaxCodeRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet SalesTaxCodeRef *' => array('SalesReceipt_SalesReceiptLine', 'SalesTaxCode_*'), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('SalesReceipt_SalesReceiptLine', 'CreditCardTxnInfo_CreditCardTxnInputInfo_*'), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('SalesReceipt_SalesReceiptLine', 'CreditCardTxnInfo_CreditCardTxnResultInfo_*'), 'SalesReceiptRet SalesReceiptLineRet CreditCardTxnInfo *' => array('SalesReceipt_SalesReceiptLine_CreditCardTxnInfo', '*'), 'SalesReceiptRet SalesReceiptLineRet DataExtRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineRet DataExtRet *' => array('DataExt', '*'), 'SalesReceiptRet SalesReceiptLineRet *' => array('SalesReceipt_SalesReceiptLine', '*'), 'SalesReceiptRet SalesReceiptLineGroupRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet ItemGroupRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet ItemGroupRef *' => array('SalesReceipt_SalesReceiptLineGroup', 'ItemGroup_*'), 'SalesReceiptRet SalesReceiptLineGroupRet OverrideUOMSetRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet OverrideUOMSetRef *' => array('SalesReceipt_SalesReceiptLineGroup', 'OverrideUOMSet_*'), 'SalesReceiptRet SalesReceiptLineGroupRet Desc' => array('SalesReceipt_SalesReceiptLineGroup', 'Descrip'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet ItemRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet ItemRef *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'Item_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet OverrideUOMSetRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet OverrideUOMSetRef *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'OverrideUOMSet_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet ClassRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet ClassRef *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'Class_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet SalesTaxCodeRef' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet SalesTaxCodeRef *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'SalesTaxCode_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet Desc' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'Descrip'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnInputInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnInputInfo *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'CreditCardTxnInfo_CreditCardTxnInputInfo_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnResultInfo' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo CreditCardTxnResultInfo *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'CreditCardTxnInfo_CreditCardTxnResultInfo_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet CreditCardTxnInfo *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'CreditCardTxnInfo_*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet DataExtRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet DataExtRet *' => array('DataExt', '*'), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet *' => array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', '*'), 'SalesReceiptRet SalesReceiptLineGroupRet DataExtRet' => array(null, null), 'SalesReceiptRet SalesReceiptLineGroupRet DataExtRet *' => array('DataExt', '*'), 'SalesReceiptRet SalesReceiptLineGroupRet *' => array('SalesReceipt_SalesReceiptLineGroup', '*'), 'SalesReceiptRet DataExtRet' => array(null, null), 'SalesReceiptRet DataExtRet *' => array('DataExt', '*'), 'SalesReceiptRet *' => array('SalesReceipt', '*'), 'SalesRepRet' => array('SalesRep', null), 'SalesRepRet SalesRepEntityRef' => array(null, null), 'SalesRepRet SalesRepEntityRef *' => array('SalesRep', 'SalesRepEntity_*'), 'SalesRepRet *' => array('SalesRep', '*'), 'SalesTaxCodeRet' => array('SalesTaxCode', null), 'SalesTaxCodeRet Desc' => array('SalesTaxCode', 'Descrip'), 'SalesTaxCodeRet *' => array('SalesTaxCode', '*'), 'ShipMethodRet' => array('ShipMethod', null), 'ShipMethodRet *' => array('ShipMethod', '*'), 'StandardTermsRet' => array('StandardTerms', null), 'StandardTermsRet *' => array('StandardTerms', '*'), 'StandardTermsRet' => array(null, null), 'StandardTermsRet *' => array('StandardTerms', '*'), 'TemplateRet' => array('Template', null), 'TemplateRet *' => array('Template', '*'), 'TimeTrackingRet' => array('TimeTracking', null), 'TimeTrackingRet EntityRef' => array(null, null), 'TimeTrackingRet EntityRef *' => array('TimeTracking', 'Entity_*'), 'TimeTrackingRet CustomerRef' => array(null, null), 'TimeTrackingRet CustomerRef *' => array('TimeTracking', 'Customer_*'), 'TimeTrackingRet ItemServiceRef' => array(null, null), 'TimeTrackingRet ItemServiceRef *' => array('TimeTracking', 'ItemService_*'), 'TimeTrackingRet ClassRef' => array(null, null), 'TimeTrackingRet ClassRef *' => array('TimeTracking', 'Class_*'), 'TimeTrackingRet PayrollItemWageRef' => array(null, null), 'TimeTrackingRet PayrollItemWageRef *' => array('TimeTracking', 'PayrollItemWage_*'), 'TimeTrackingRet *' => array('TimeTracking', '*'), 'UnitOfMeasureSetRet' => array('UnitOfMeasureSet', null), 'UnitOfMeasureSetRet BaseUnit' => array(null, null), 'UnitOfMeasureSetRet BaseUnit *' => array('UnitOfMeasureSet', 'BaseUnit_*'), 'UnitOfMeasureSetRet RelatedUnit' => array(null, null), 'UnitOfMeasureSetRet RelatedUnit *' => array('UnitOfMeasureSet_RelatedUnit', '*'), 'UnitOfMeasureSetRet DefaultUnit' => array(null, null), 'UnitOfMeasureSetRet DefaultUnit *' => array('UnitOfMeasureSet_DefaultUnit', '*'), 'UnitOfMeasureSetRet *' => array('UnitOfMeasureSet', '*'), 'VehicleRet' => array('Vehicle', null), 'VehicleRet Desc' => array('Vehicle', 'Descrip'), 'VehicleRet *' => array('Vehicle', '*'), 'VehicleMileageRet' => array('VehicleMileage', null), 'VehicleMileageRet VehicleRef' => array(null, null), 'VehicleMileageRet VehicleRef *' => array('VehicleMileage', 'Vehicle_*'), 'VehicleMileageRet CustomerRef' => array(null, null), 'VehicleMileageRet CustomerRef *' => array('VehicleMileage', 'Customer_*'), 'VehicleMileageRet ItemRef' => array(null, null), 'VehicleMileageRet ItemRef *' => array('VehicleMileage', 'Item_*'), 'VehicleMileageRet ClassRef' => array(null, null), 'VehicleMileageRet ClassRef *' => array('VehicleMileage', 'Class_*'), 'VehicleMileageRet *' => array('VehicleMileage', '*'), 'VendorRet' => array('Vendor', null), 'VendorRet VendorAddress' => array(null, null), 'VendorRet VendorAddress *' => array('Vendor', 'VendorAddress_*'), 'VendorRet VendorAddressBlock' => array(null, null), 'VendorRet VendorAddressBlock *' => array('Vendor', 'VendorAddressBlock_*'), 'VendorRet VendorTypeRef' => array(null, null), 'VendorRet VendorTypeRef *' => array('Vendor', 'VendorType_*'), 'VendorRet TermsRef' => array(null, null), 'VendorRet TermsRef *' => array('Vendor', 'Terms_*'), 'VendorRet BillingRateRef' => array(null, null), 'VendorRet BillingRateRef *' => array('Vendor', 'BillingRate_*'), 'VendorRet DataExtRet' => array(null, null), 'VendorRet DataExtRet *' => array('DataExt', '*'), 'VendorRet *' => array('Vendor', '*'), 'VendorCreditRet' => array('VendorCredit', null), 'VendorCreditRet VendorRef' => array(null, null), 'VendorCreditRet VendorRef *' => array('VendorCredit', 'Vendor_*'), 'VendorCreditRet APAccountRef' => array(null, null), 'VendorCreditRet APAccountRef *' => array('VendorCredit', 'APAccount_*'), 'VendorCreditRet LinkedTxn' => array(null, null), 'VendorCreditRet LinkedTxn TxnID' => array('VendorCredit_LinkedTxn', 'ToTxnID'), 'VendorCreditRet LinkedTxn *' => array('VendorCredit_LinkedTxn', '*'), 'VendorCreditRet ExpenseLineRet' => array(null, null), 'VendorCreditRet ExpenseLineRet AccountRef' => array(null, null), 'VendorCreditRet ExpenseLineRet AccountRef *' => array('VendorCredit_ExpenseLine', 'Account_*'), 'VendorCreditRet ExpenseLineRet CustomerRef' => array(null, null), 'VendorCreditRet ExpenseLineRet CustomerRef *' => array('VendorCredit_ExpenseLine', 'Customer_*'), 'VendorCreditRet ExpenseLineRet ClassRef' => array(null, null), 'VendorCreditRet ExpenseLineRet ClassRef *' => array('VendorCredit_ExpenseLine', 'Class_*'), 'VendorCreditRet ExpenseLineRet *' => array('VendorCredit_ExpenseLine', '*'), 'VendorCreditRet ItemLineRet' => array(null, null), 'VendorCreditRet ItemLineRet Desc' => array('VendorCredit_ItemLine', 'Descrip'), 'VendorCreditRet ItemLineRet ItemRef' => array(null, null), 'VendorCreditRet ItemLineRet ItemRef *' => array('VendorCredit_ItemLine', 'Item_*'), 'VendorCreditRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'VendorCreditRet ItemLineRet OverrideUOMSetRef *' => array('VendorCredit_ItemLine', 'OverrideUOMSet_*'), 'VendorCreditRet ItemLineRet CustomerRef' => array(null, null), 'VendorCreditRet ItemLineRet CustomerRef *' => array('VendorCredit_ItemLine', 'Customer_*'), 'VendorCreditRet ItemLineRet ClassRef' => array(null, null), 'VendorCreditRet ItemLineRet ClassRef *' => array('VendorCredit_ItemLine', 'Class_*'), 'VendorCreditRet ItemLineRet *' => array('VendorCredit_ItemLine', '*'), 'VendorCreditRet ItemGroupLineRet' => array(null, null), 'VendorCreditRet ItemGroupLineRet Desc' => array('VendorCredit_ItemGroupLine', 'Descrip'), 'VendorCreditRet ItemGroupLineRet ItemGroupRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemGroupRef *' => array('VendorCredit_ItemGroupLine', 'ItemGroup_*'), 'VendorCreditRet ItemGroupLineRet OverrideUOMSetRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet OverrideUOMSetRef *' => array('VendorCredit_ItemGroupLine', 'OverrideUOMSet_*'), 'VendorCreditRet ItemGroupLineRet ItemLineRet' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemLineRet ItemRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemLineRet ItemRef *' => array('VendorCredit_ItemGroupLine_ItemLine', 'Item_*'), 'VendorCreditRet ItemGroupLineRet ItemLineRet Desc' => array('VendorCredit_ItemGroupLine_ItemLine', 'Descrip'), 'VendorCreditRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemLineRet OverrideUOMSetRef *' => array('VendorCredit_ItemGroupLine_ItemLine', 'OverrideUOMSet_*'), 'VendorCreditRet ItemGroupLineRet ItemLineRet CustomerRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemLineRet CustomerRef *' => array('VendorCredit_ItemGroupLine_ItemLine', 'Customer_*'), 'VendorCreditRet ItemGroupLineRet ItemLineRet ClassRef' => array(null, null), 'VendorCreditRet ItemGroupLineRet ItemLineRet ClassRef *' => array('VendorCredit_ItemGroupLine_ItemLine', 'Class_*'), 'VendorCreditRet ItemGroupLineRet ItemLineRet *' => array('VendorCredit_ItemGroupLine_ItemLine', '*'), 'VendorCreditRet ItemGroupLineRet *' => array('VendorCredit_ItemGroupLine', '*'), 'VendorCreditRet DataExtRet' => array(null, null), 'VendorCreditRet DataExtRet *' => array('DataExt', '*'), 'VendorCreditRet *' => array('VendorCredit', '*'), 'VendorTypeRet' => array('VendorType', null), 'VendorTypeRet ParentRef' => array(null, null), 'VendorTypeRet ParentRef *' => array('VendorType', 'Parent_*'), 'VendorTypeRet *' => array('VendorType', '*'), 'WorkersCompCodeRet' => array('WorkersCompCode', null), 'WorkersCompCodeRet Desc' => array('WorkersCompCode', 'Descrip'), 'WorkersCompCodeRet RateHistory' => array(null, null), 'WorkersCompCodeRet RateHistory *' => array('WorkersCompCode_RateHistory', '*'), 'WorkersCompCodeRet *' => array('WorkersCompCode', '*'));
     static $sql_to_xml = null;
     if (is_null($sql_to_xml)) {
         foreach ($xml_to_sql as $xml => $sql) {
             $sql_to_xml[$sql[0] . '.' . $sql[1]] = $xml;
         }
     }
     // Something in here is broken... it's pushing arrays into places where strings should be...
     static $xml_to_sql_others = array('AccountRet TaxLineInfoRet' => array(array('Account_TaxLineInfo', 'Account_ListID'), array('Account_TaxLineInfo', 'Account_FullName')), 'AccountRet DataExtRet' => array(array('DataExt', 'EntityType'), array('DataExt', 'TxnType'), array('DataExt', 'Entity_ListID'), array('DataExt', 'Txn_TxnID')), 'BillingRateRet BillingRatePerItemRet' => array(array('BillingRate_BillingRatePerItem', 'BillingRate_ListID'), array('BillingRate_BillingRatePerItem', 'BillingRate_FullName')), 'BillPaymentCheckRet' => array(array('BillPaymentCheck', 'ExchangeRate'), array('BillPaymentCheck', 'AmountInHomeCurrency')), 'BillPaymentCheckRet AppliedToTxnRet' => array(array('BillPaymentCheck_AppliedToTxn', 'FromTxnID')), 'BillPaymentCreditCardRet AppliedToTxnRet' => array(array('BillPaymentCreditCard_AppliedToTxn', 'FromTxnID')), 'BillRet' => array(array('Bill', 'Tax1Total'), array('Bill', 'Tax2Total'), array('Bill', 'ExchangeRate')), 'BillRet LinkedTxn' => array(array('Bill_LinkedTxn', 'FromTxnID'), array('Bill_LinkedTxn', 'LinkType')), 'BillRet ExpenseLineRet' => array(array('Bill_ExpenseLine', 'Bill_TxnID')), 'BillRet ItemLineRet' => array(array('Bill_ItemLine', 'Bill_TxnID')), 'BillRet ItemGroupLineRet' => array(array('Bill_ItemGroupLine', 'Bill_TxnID'), array('Bill_ItemGroupLine', 'TxnLineID')), 'BillRet ItemGroupLineRet ItemLineRet' => array(array('Bill_ItemGroupLine_ItemLine', 'Bill_ItemGroupLine_TxnLineID'), array('Bill_ItemGroupLine_ItemLine', 'Bill_TxnID')), 'ChargeRet' => array(array('Charge', 'IsPaid')), 'CheckRet ExpenseLineRet' => array(array('Check_ExpenseLine', 'Check_TxnID')), 'CheckRet ItemGroupLineRet' => array(array('Check_ItemGroupLine', 'Check_TxnID')), 'CheckRet ItemGroupLineRet ItemLineRet' => array(array('Check_ItemGroupLine_ItemLine', 'Check_TxnID'), array('Check_ItemGroupLine_ItemLine', 'Check_ItemGroupLine_TxnLineID')), 'CheckRet ItemLineRet' => array(array('Check_ItemLine', 'Check_TxnID')), 'CheckRet LinkedTxn' => array(array('Check_LinkedTxn', 'FromTxnID'), array('Check_LinkedTxn', 'LinkType')), 'CompanyRet SubscribedServices Service' => array(array('Company_SubscribedServices_Service', 'Company_CompanyName')), 'CreditCardChargeRet ExpenseLineRet' => array(array('CreditCardCharge_ExpenseLine', 'CreditCardCharge_TxnID')), 'CreditCardChargeRet ItemLineRet' => array(array('CreditCardCharge_ItemLine', 'CreditCardCharge_TxnID')), 'CreditCardChargeRet ItemGroupLineRet' => array(array('CreditCardCharge_ItemGroupLine', 'CreditCardCharge_TxnID')), 'CreditCardChargeRet ItemGroupLineRet ItemLineRet' => array(array('CreditCardCharge_ItemGroupLine_ItemLine', 'CreditCardCharge_TxnID'), array('CreditCardCharge_ItemGroupLine_ItemLine', 'CreditCardCharge_ItemGroupLine_TxnLineID')), 'CreditCardCreditRet ExpenseLineRet' => array(array('CreditCardCredit_ExpenseLine', 'CreditCardCredit_TxnID')), 'CreditCardCreditRet ItemLineRet' => array(array('CreditCardCredit_ItemLine', 'CreditCardCredit_TxnID')), 'CreditCardCreditRet ItemGroupLineRet' => array(array('CreditCardCredit_ItemGroupLine', 'CreditCardCredit_TxnID')), 'CreditCardCreditRet ItemGroupLineRet ItemLineRet' => array(array('CreditCardCredit_ItemGroupLine_ItemLine', 'CreditCardCredit_TxnID'), array('CreditCardCredit_ItemGroupLine_ItemLine', 'CreditCardCredit_ItemGroupLine_TxnLineID')), 'CreditMemoRet CreditMemoLineRet' => array(array('CreditMemo_CreditMemoLine', 'CreditMemo_TxnID')), 'CreditMemoRet CreditMemoLineGroupRet' => array(array('CreditMemo_CreditMemoLineGroup', 'CreditMemo_TxnID')), 'CreditMemoRet CreditMemoLineGroupRet CreditMemoLineRet' => array(array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'CreditMemo_TxnID'), array('CreditMemo_CreditMemoLineGroup_CreditMemoLine', 'CreditMemo_CreditMemoLineGroup_TxnLineID')), 'CreditMemoRet LinkedTxn' => array(array('CreditMemo_LinkedTxn', 'FromTxnID'), array('CreditMemo_LinkedTxn', 'LinkType')), 'DataExtDefRet AssignToObject' => array(array('DataExtDef_AssignToObject', 'DataExtDef_OwnerID'), array('DataExtDef_AssignToObject', 'DataExtDef_DataExtName')), 'DepositRet DepositLineRet' => array(array('Deposit_DepositLine', 'Deposit_TxnID')), 'EmployeeRet EmployeePayrollInfo Earnings' => array(array('Employee_Earnings', 'Employee_ListID')), 'EstimateRet EstimateLineRet' => array(array('Estimate_EstimateLine', 'Estimate_TxnID')), 'EstimateRet EstimateLineGroupRet' => array(array('Estimate_EstimateLineGroup', 'Estimate_TxnID')), 'EstimateRet EstimateLineGroupRet EstimateLineRet' => array(array('Estimate_EstimateLineGroup_EstimateLine', 'Estimate_TxnID'), array('Estimate_EstimateLineGroup_EstimateLine', 'Estimate_EstimateLineGroup_TxnLineID')), 'EstimateRet LinkedTxn' => array(array('Estimate_LinkedTxn', 'FromTxnID'), array('Estimate_LinkedTxn', 'LinkType')), 'InventoryAdjustmentRet InventoryAdjustmentLineRet' => array(array('InventoryAdjustment_InventoryAdjustmentLine', 'InventoryAdjustment_TxnID')), 'InvoiceRet InvoiceLineRet' => array(array('Invoice_InvoiceLine', 'Invoice_TxnID')), 'InvoiceRet InvoiceLineGroupRet' => array(array('Invoice_InvoiceLineGroup', 'Invoice_TxnID')), 'InvoiceRet InvoiceLineGroupRet InvoiceLineRet' => array(array('Invoice_InvoiceLineGroup_InvoiceLine', 'Invoice_TxnID'), array('Invoice_InvoiceLineGroup_InvoiceLine', 'Invoice_InvoiceLineGroup_TxnLineID')), 'InvoiceRet LinkedTxn' => array(array('Invoice_LinkedTxn', 'FromTxnID'), array('Invoice_LinkedTxn', 'LinkType')), 'ItemGroupRet ItemGroupLine' => array(array('ItemGroup_ItemGroupLine', 'ItemGroup_ListID')), 'ItemInventoryAssemblyRet ItemInventoryAssemblyLine' => array(array('ItemInventoryAssembly_ItemInventoryAssemblyLine', 'ItemInventoryAssembly_ListID')), 'ItemReceiptRet ExpenseLineRet' => array(array('ItemReceipt_ExpenseLine', 'ItemReceipt_TxnID')), 'ItemReceiptRet ItemLineRet' => array(array('ItemReceipt_ItemLine', 'ItemReceipt_TxnID')), 'ItemReceiptRet ItemGroupLineRet' => array(array('ItemReceipt_ItemGroupLine', 'ItemReceipt_TxnID')), 'ItemReceiptRet ItemGroupLineRet ItemLineRet' => array(array('ItemReceipt_ItemGroupLine_ItemLine', 'ItemReceipt_TxnID'), array('ItemReceipt_ItemGroupLine_ItemLine', 'ItemReceipt_ItemGroupLine_TxnLineID')), 'ItemReceiptRet LinkedTxn' => array(array('ItemReceipt_LinkedTxn', 'FromTxnID'), array('ItemReceipt_LinkedTxn', 'LinkType')), 'ItemSalesTaxGroupRet ItemSalesTaxRef' => array(array('ItemSalesTaxGroup_ItemSalesTax', 'ItemSalesTaxGroup_ListID')), 'JournalEntryRet JournalDebitLine' => array(array('JournalEntry_JournalDebitLine', 'JournalEntry_TxnID')), 'JournalEntryRet JournalCreditLine' => array(array('JournalEntry_JournalCreditLine', 'JournalEntry_TxnID')), 'PriceLevelRet PriceLevelPerItemRet' => array(array('PriceLevel_PriceLevelPerItem', 'PriceLevel_ListID')), 'PurchaseOrderRet PurchaseOrderLineRet' => array(array('PurchaseOrder_PurchaseOrderLine', 'PurchaseOrder_TxnID')), 'PurchaseOrderRet PurchaseOrderLineGroupRet' => array(array('PurchaseOrder_PurchaseOrderLineGroup', 'PurchaseOrder_TxnID')), 'PurchaseOrderRet PurchaseOrderLineGroupRet PurchaseOrderLineRet' => array(array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'PurchaseOrder_TxnID'), array('PurchaseOrder_PurchaseOrderLineGroup_PurchaseOrderLine', 'PurchaseOrder_PurchaseOrderLineGroup_TxnLineID')), 'PurchaseOrderRet LinkedTxn' => array(array('PurchaseOrder_LinkedTxn', 'FromTxnID'), array('PurchaseOrder_LinkedTxn', 'LinkType')), 'ReceivePaymentRet AppliedToTxnRet' => array(array('ReceivePayment_AppliedToTxn', 'FromTxnID')), 'SalesOrderRet SalesOrderLineRet' => array(array('SalesOrder_SalesOrderLine', 'SalesOrder_TxnID')), 'SalesOrderRet SalesOrderLineGroupRet' => array(array('SalesOrder_SalesOrderLineGroup', 'SalesOrder_TxnID')), 'SalesOrderRet SalesOrderLineGroupRet SalesOrderLineRet' => array(array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'SalesOrder_TxnID'), array('SalesOrder_SalesOrderLineGroup_SalesOrderLine', 'SalesOrder_SalesOrderLineGroup_TxnLineID')), 'SalesOrderRet LinkedTxn' => array(array('SalesOrder_LinkedTxn', 'FromTxnID'), array('SalesOrder_LinkedTxn', 'LinkType')), 'SalesReceiptRet SalesReceiptLineRet' => array(array('SalesReceipt_SalesReceiptLine', 'SalesReceipt_TxnID')), 'SalesReceiptRet SalesReceiptLineGroupRet' => array(array('SalesReceipt_SalesReceiptLineGroup', 'SalesReceipt_TxnID')), 'SalesReceiptRet SalesReceiptLineGroupRet SalesReceiptLineRet' => array(array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'SalesReceipt_TxnID'), array('SalesReceipt_SalesReceiptLineGroup_SalesReceiptLine', 'SalesReceipt_SalesReceiptLineGroup_TxnLineID')), 'UnitOfMeasureSetRet RelatedUnit' => array(array('UnitOfMeasureSet_RelatedUnit', 'UnitOfMeasureSet_ListID')), 'UnitOfMeasureSetRet DefaultUnit' => array(array('UnitOfMeasureSet_DefaultUnit', 'UnitOfMeasureSet_ListID')), 'VendorCreditRet ExpenseLineRet' => array(array('VendorCredit_ExpenseLine', 'VendorCredit_TxnID')), 'VendorCreditRet ItemLineRet' => array(array('VendorCredit_ItemLine', 'VendorCredit_TxnID')), 'VendorCreditRet ItemGroupLineRet' => array(array('VendorCredit_ItemGroupLine', 'VendorCredit_TxnID')), 'VendorCreditRet ItemGroupLineRet ItemLineRet' => array(array('VendorCredit_ItemGroupLine_ItemLine', 'VendorCredit_TxnID'), array('VendorCredit_ItemGroupLine_ItemLine', 'VendorCredit_ItemGroupLine_TxnLineID')), 'VendorCreditRet LinkedTxn' => array(array('VendorCredit_LinkedTxn', 'FromTxnID'), array('VendorCredit_LinkedTxn', 'LinkType')), 'WorkersCompCodeRet RateHistory' => array(array('WorkersCompCode_RateHistory', 'WorkersCompCode_ListID')));
     if ($mode == QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL) {
         $path = trim($path_or_tablefield);
         $spaces = substr_count($path, ' ');
         $map = array(null, null);
         // default map
         // @todo Can we break out of this big loop early to improve performance?
         foreach ($xml_to_sql as $pattern => $table_and_field) {
             if (substr_count($pattern, ' ') == $spaces and false !== strpos($pattern, '*')) {
                 if (QuickBooks_SQL_Schema::_fnmatch($pattern, $path)) {
                     foreach (explode(' ', $pattern) as $kpart => $vpart) {
                         if ($vpart == '*') {
                             $xml = explode(' ', $path);
                             $match = $xml[$kpart];
                             /*
                             if ($options['uppercase_tables'])
                             {
                             	$table_and_field[0] = strtoupper($table_and_field[0]);
                             }
                             else if ($options['lowercase_tables'])
                             {
                             	$table_and_field[0] = strtolower($table_and_field[0]);
                             }
                             
                             if ($options['uppercase_fields'])
                             {
                             	$table_and_field[1] = strtoupper($table_and_field[1]);
                             }
                             else if ($options['lowercase_fields'])
                             {
                             	$table_and_field[1] = strtolower($table_and_field[1]);
                             }
                             */
                             $map = array($table_and_field[0], str_replace('*', $match, $table_and_field[1]));
                             QuickBooks_SQL_Schema::_applyOptions($map, QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $options);
                             break;
                         }
                     }
                 }
             } else {
                 if ($pattern == $path) {
                     $map = $table_and_field;
                     QuickBooks_SQL_Schema::_applyOptions($map, QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $options);
                     if (isset($xml_to_sql_others[$pattern])) {
                         $others = $xml_to_sql_others[$pattern];
                         foreach ($others as $key => $other) {
                             QuickBooks_SQL_Schema::_applyOptions($other, QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $options);
                             $others[$key] = $other;
                         }
                     }
                     break;
                 }
             }
         }
         //print_r($map);
         //print_r($others);
     } else {
         $tablefield = trim($path_or_tablefield);
         $tablefield_compare = strtolower($tablefield);
         $underscores = substr_count($tablefield, '_');
         $map = '';
         //print_r($sql_to_xml);
         foreach ($sql_to_xml as $pattern => $path) {
             $pattern_compare = strtolower($pattern);
             if ($pattern_compare == $tablefield_compare) {
                 $map = $path;
                 break;
             } else {
                 if (substr_count($pattern, '_') == $underscores and false !== strpos($pattern, '*')) {
                     if (QuickBooks_SQL_Schema::_fnmatch($pattern_compare, $tablefield_compare)) {
                         $tmp_pattern = explode('.', $pattern);
                         if (count($tmp_pattern) == 2 and $tmp_pattern[1] == '*') {
                             // table.* pattern
                             $tmp_tablefield = explode('.', $tablefield);
                             $map = str_replace('*', $tmp_tablefield[1], $path);
                             break;
                         } else {
                             //print('matched ' . $tablefield . ' to ' . $path . ' (' . $pattern . ') ' . "\n");
                             $pos = strpos($pattern, '*');
                             $field = substr($tablefield, $pos);
                             $map = str_replace('*', $field, $path);
                             break;
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 6
0
 /**
  * 
  * 
  * 
  */
 protected function &_createForMirror($mode, $user, $date_from, $date_to, $fetch_full_record, $restrict)
 {
     $Driver = $this->_driver;
     $report = array();
     $do_restrict = count($restrict) > 0;
     $actions = QuickBooks_Utilities::listActions('*IMPORT*');
     //print_r($actions);
     //print_r($restrict);
     foreach ($actions as $action) {
         $object = QuickBooks_Utilities::actionToObject($action);
         //print('checking object [' . $object . ']' . "<br />");
         if ($do_restrict and !in_array($object, $restrict)) {
             continue;
         }
         //print('doing object: ' . $object . '<br />');
         $pretty = $this->_prettyName($object);
         $report[$pretty] = array();
         QuickBooks_SQL_Schema::mapPrimaryKey($object, QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $table_and_field);
         //print_r($table_and_field);
         if (!empty($table_and_field[0]) and !empty($table_and_field[1])) {
             $sql = "\n\t\t\t\t\tSELECT \n\t\t\t\t\t\t*\n\t\t\t\t\tFROM \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table_and_field[0] . " \n\t\t\t\t\tWHERE ";
             if ($mode == QuickBooks_Status_Report::MODE_MIRROR_ERRORS) {
                 $sql .= " LENGTH(" . QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER . ") > 0 ";
             } else {
                 $sql .= " 1 ";
             }
             if ($timestamp = strtotime($date_from) and $timestamp > 0) {
                 $sql .= " AND TimeCreated >= '" . date('Y-m-d H:i:s', $timestamp) . "' ";
             }
             if ($timestamp = strtotime($date_to) and $timestamp > 0) {
                 $sql .= " AND TimeCreated <= '" . date('Y-m-d H:i:s', $timestamp) . "' ";
             }
             $sql .= " ORDER BY qbsql_id DESC ";
             //print($sql);
             $errnum = 0;
             $errmsg = '';
             $res = $Driver->query($sql, $errnum, $errmsg);
             while ($arr = $Driver->fetch($res)) {
                 $record = null;
                 if ($fetch_full_record) {
                     $record = $arr;
                 }
                 if ($arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER]) {
                     $details = QuickBooks_Status_Report::describe($arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER], $arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE]);
                 } else {
                     if ($arr[QUICKBOOKS_DRIVER_SQL_FIELD_RESYNC] == $arr[QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY]) {
                         $details = 'Synced successfully.';
                     } else {
                         if ($arr[QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY] > $arr[QUICKBOOKS_DRIVER_SQL_FIELD_RESYNC]) {
                             $details = 'Waiting to sync.';
                         }
                     }
                 }
                 $report[$pretty][] = array($arr[QUICKBOOKS_DRIVER_SQL_FIELD_ID], $this->_fetchSomeField($arr, array('ListID', 'TxnID')), $this->_fetchSomeField($arr, array('FullName', 'Name', 'RefNumber')), $this->_fetchSomeField($arr, array('TxnDate')), $this->_fetchSomeField($arr, array('Customer_FullName', 'Vendor_FullName')), $arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER], $arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE], $details, $arr[QUICKBOOKS_DRIVER_SQL_FIELD_DEQUEUE_TIME], $record);
             }
         }
     }
     return $report;
 }
Exemplo n.º 7
0
 /**
  * @TODO Change this to return false by default, and only catch the specific errors we're concerned with.
  * 
  */
 public static function catchall($requestID, $user, $action, $ident, $extra, &$err, $xml, $errnum, $errmsg, $config)
 {
     $Driver = QuickBooks_Driver_Singleton::getInstance();
     $ignore = array(QUICKBOOKS_IMPORT_DELETEDTXNS => true, QUICKBOOKS_QUERY_DELETEDTXNS => true, QUICKBOOKS_IMPORT_DELETEDLISTS => true, QUICKBOOKS_QUERY_DELETEDLISTS => true, QUICKBOOKS_VOID_TRANSACTION => true, QUICKBOOKS_DELETE_TRANSACTION => true, QUICKBOOKS_DELETE_LIST => true);
     if (isset($ignore[$action])) {
         // Ignore errors for these requests
         return true;
     }
     /*
     $Parser = new QuickBooks_XML($xml);
     $errnumTemp = 0;
     $errmsgTemp = '';
     $Doc = $Parser->parse($errnumTemp, $errmsgTemp);
     $Root = $Doc->getRoot();		
     $emailStr = var_export($Root->children(), true);
     	
     $List = $Root->getChildAt('QBXML QBXMLMsgsRs '.QuickBooks_Utilities::actionToResponse($action));
     $Node = current($List->children());
     */
     $map = array();
     $others = array();
     QuickBooks_SQL_Schema::mapToSchema(trim(QuickBooks_Utilities::actionToXMLElement($action)), QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $map, $others);
     $object = new QuickBooks_SQL_Object($map[0], trim(QuickBooks_Utilities::actionToXMLElement($action)));
     $table = $object->table();
     $existing = null;
     if ($table and is_numeric($ident)) {
         $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
         $existing = $Driver->get(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $multipart);
     }
     switch ($errnum) {
         case 1:
             // These errors occur when we search for something and it doesn't exist
         // These errors occur when we search for something and it doesn't exist
         case 500:
             // 	i.e. we query for invoices modified since xyz, but there are none that have been modified since then
             // This isn't really an error, just ignore it
             if ($action == QUICKBOOKS_DERIVE_CUSTOMER) {
                 // Tried to derive, doesn't exist, add it
                 $Driver->queueEnqueue($user, QUICKBOOKS_ADD_CUSTOMER, $ident, true, QuickBooks_Utilities::priorityForAction(QUICKBOOKS_ADD_CUSTOMER));
             } else {
                 if ($action == QUICKBOOKS_DERIVE_INVOICE) {
                     // Tried to derive, doesn't exist, add it
                     $Driver->queueEnqueue($user, QUICKBOOKS_ADD_INVOICE, $ident, true, QuickBooks_Utilities::priorityForAction(QUICKBOOKS_ADD_INVOICE));
                 } else {
                     if ($action == QUICKBOOKS_DERIVE_RECEIVEPAYMENT) {
                         // Tried to derive, doesn't exist, add it
                         $Driver->queueEnqueue($user, QUICKBOOKS_ADD_RECEIVEPAYMENT, $ident, true, QuickBooks_Utilities::priorityForAction(QUICKBOOKS_ADD_RECEIVEPAYMENT));
                     }
                 }
             }
             return true;
         case 1000:
             // An internal error occured
             // @todo Hopefully at some point we'll have a better idea of how to handle this error...
             return true;
             //case 3120:			// 3120 errors are handled in the 3210 error handler section
             //	break;
         //case 3120:			// 3120 errors are handled in the 3210 error handler section
         //	break;
         case 3170:
             // This list has been modified by another user.
         // This list has been modified by another user.
         case 3175:
         case 3176:
         case 3180:
             // This error can occur in several different situations, so we test per situation
             if (false !== strpos($errmsg, 'list has been modified by another user') or false !== strpos($errmsg, 'internals could not be locked') or false !== strpos($errmsg, 'failed to acquire the lock') or false !== strpos($errmsg, 'list element is in use')) {
                 // This is *not* an error, we can just send the request again, and it'll go through just fine
                 return true;
             }
             break;
         case 3200:
             // Ignore EditSequence errors (the record will be picked up and a conflict reported next time it runs... maybe?)
             if ($action == QUICKBOOKS_MOD_CUSTOMER and $existing) {
                 // Queue up a derive customer request
                 // Tried to derive, doesn't exist, add it
                 $Driver->queueEnqueue($user, QUICKBOOKS_DERIVE_CUSTOMER, $ident, true, 9999, array('ListID' => $existing['ListID']));
             } else {
                 if ($action == QUICKBOOKS_MOD_INVOICE and $existing) {
                     // Queue up a derive customer request
                     // Tried to derive, doesn't exist, add it
                     $Driver->queueEnqueue($user, QUICKBOOKS_DERIVE_INVOICE, $ident, true, 9999, array('TxnID' => $existing['TxnID']));
                 }
             }
             return true;
         case 3120:
         case 3210:
             //print_r($existing);
             //print('TXNID: [' . $existing['TxnID'] . ']');
             // 3210: The &quot;AppliedToTxnAdd payment amount&quot; field has an invalid value &quot;129.43&quot;.  QuickBooks error message: You cannot pay more than the amount due.
             if ($action == QUICKBOOKS_ADD_RECEIVEPAYMENT and (false !== strpos($errmsg, 'pay more than the amount due') or false !== strpos($errmsg, 'cannot be found')) and $existing) {
                 // If this happens, we're going to try to re-submit the payment, *without* the AppliedToTxn element
                 $db_errnum = null;
                 $db_errmsg = null;
                 $Driver->query("\n\t\t\t\t\t\tUPDATE \n\t\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . "receivepayment_appliedtotxn \n\t\t\t\t\t\tSET \n\t\t\t\t\t\t\tqbsql_to_skip = 1 \n\t\t\t\t\t\tWHERE \n\t\t\t\t\t\t\tReceivePayment_TxnID = '%s' ", $db_errnum, $db_errmsg, null, null, array($existing['TxnID']));
                 return true;
             }
             break;
         case 3250:
             // This feature is not enabled or not available in this version of QuickBooks.
             // Do nothing (this can be safely ignored)
             return true;
         case 3260:
             // Insufficient permission level to perform this action.
         // Insufficient permission level to perform this action.
         case 3261:
             // The integrated application has no permission to ac...
             // There's nothing we can do about this, if they don't grant the user permission, just skip it
             return true;
         case 3100:
             // Name of List Element is already in use.
             break;
         case '0x8004040D':
             // The ticket parameter is invalid  (how does this happen!?!)
             return true;
     }
     // This is our catch-all which marks the item as errored out
     if (strstr($xml, 'statusSeverity="Info"') === false) {
         $multipart = array(QUICKBOOKS_DRIVER_SQL_FIELD_ID => $ident);
         $object->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER, $errnum);
         $object->set(QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_MESSAGE, $errmsg);
         // Do not set the resync field, we want resync and modified timestamps to be different
         $update_resync_field = false;
         $update_discov_field = false;
         $update_derive_field = false;
         if ($table and is_numeric($ident)) {
             // Set the error message
             $Driver->update(QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table, $object, array($multipart), $update_resync_field, $update_discov_field, $update_derive_field);
         }
     }
     // Please don't change this, it stops us from knowing what's actually
     //	going wrong. If an error occurs, we should either catch it if it's
     //	recoverable, or treated as a fatal error so we know about it and
     //	can address it later.
     //return false;
     // I'm changing it because otherwise the sync never completes if a
     //	single error occurs... we need a way to skip errored-out records
     return true;
 }
Exemplo n.º 8
0
 public function adds($adds = array(), $mark_as_queued = true, $limit = null)
 {
     $Driver = $this->_driver;
     $NOW = date('Y-m-d H:i:s');
     $sql_add = $adds;
     $list = array();
     //$Driver->log('Input is: ' . print_r($adds, true));
     // Check if any objects need to be pushed back to QuickBooks
     foreach ($sql_add as $action => $priority) {
         $object = QuickBooks_Utilities::actionToObject($action);
         //$Driver->log('Action is: ' . $action . ', object is: ' . $object);
         $table_and_field = array();
         // Convert to table and primary key, select qbsql id
         QuickBooks_SQL_Schema::mapPrimaryKey($object, QUICKBOOKS_SQL_SCHEMA_MAP_TO_SQL, $table_and_field);
         $Driver->log('Searching table: ' . print_r($table_and_field, true) . ' for ADDED records.');
         //print_r($table_and_field);
         if (!empty($table_and_field[0]) and !empty($table_and_field[1])) {
             // For ADDs
             // 	- Do not sync if to_skip = 1
             //	- Do not sync if to_delete = 1
             //	- Do not sync if last_errnum is not empty		@TODO Implement this
             switch ($table_and_field[0]) {
                 case 'customer':
                     $priority_reduce = 'Parent_FullName';
                     break;
                 default:
                     $priority_reduce = null;
             }
             $extras = '';
             if ($priority_reduce) {
                 $extras = ', ' . $priority_reduce;
             }
             $sql = "\n\t\t\t\t\tSELECT \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_ID . ", \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER . " " . $extras . "\n\t\t\t\t\tFROM \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table_and_field[0] . " \n\t\t\t\t\tWHERE \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY . " IS NOT NULL AND \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_RESYNC . " IS NULL AND \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_TO_SKIP . " != 1 AND \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_TO_DELETE . " != 1 AND \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_FLAG_DELETED . " != 1 AND \n\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_MODIFY . " <= '" . $NOW . "' ";
             //		" . QUICKBOOKS_DRIVER_SQL_FLAG_TO_VOID . " != 1 ";
             //$Driver->log($sql);
             $errnum = 0;
             $errmsg = '';
             $count = 0;
             $res = $Driver->query($sql, $errnum, $errmsg);
             while ($arr = $Driver->fetch($res)) {
                 if (strlen($arr[QUICKBOOKS_DRIVER_SQL_FIELD_ERROR_NUMBER])) {
                     continue;
                 }
                 if (!isset($list[$action])) {
                     $list[$action] = array();
                 }
                 $tmp_priority = $priority;
                 if ($priority_reduce and isset($arr[$priority_reduce]) and !empty($arr[$priority_reduce])) {
                     $tmp_priority = $priority - 1;
                 }
                 $list[$action][$arr[QUICKBOOKS_DRIVER_SQL_FIELD_ID]] = $tmp_priority;
                 $count++;
                 if ($mark_as_queued) {
                     // Make the record as having been ->enqueue()d
                     $errnum = 0;
                     $errmsg = '';
                     $Driver->query("\n\t\t\t\t\t\t\tUPDATE \n\t\t\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_PREFIX_SQL . $table_and_field[0] . " \n\t\t\t\t\t\t\tSET \n\t\t\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_ENQUEUE_TIME . " = '" . date('Y-m-d H:i:s') . "'\n\t\t\t\t\t\t\tWHERE \n\t\t\t\t\t\t\t\t" . QUICKBOOKS_DRIVER_SQL_FIELD_ID . " = " . $arr[QUICKBOOKS_DRIVER_SQL_FIELD_ID], $errnum, $errmsg);
                 }
                 /*
                 if (count($list[$action]) >= $limit)
                 {
                 	break;
                 }
                 */
                 if ($limit > 0 and $count >= $limit) {
                     break 2;
                 }
             }
         }
     }
     return $list;
 }