/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * This service is kind of private and so we don't need to worry about creating children services and so forth. Just parse and return true * as this will always be a child service itself and will then get deleted automatically */ parent::handleResponse(); return true; }
/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * If we failed to insert this record, then check the response status code. If there is an error code then just die as each sales order should * be unique */ if (($code = parent::handleResponse()) !== true) { throw new Exception('An error occured when trying to handle the response from the InventoryAdjustmentAdd spool ' . $this->data->spoolID); } return true; }
/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * If we failed to insert this record, then check the response status code. If the code is 3100 'Name is not unique' then we execute the required * services to 'edit' this account */ if (($code = parent::handleResponse()) !== true) { if ($code == 3100) { /** * Just quickly check to see if we already have the ListID for this account first. If we do then we just saved a 'accountmod' SOAP call. */ $reference = $this->getAccountingReference($this->spoolData['accountingspoolnode'], 'account'); if ($reference) { /** * Only call the AccountMod if we have version 6.0 or above! If so then forcefully set this service as executed */ if (!$this->quickbooks->compareClientVersion('6.0')) { $this->quickbooks->setSpoolAsExecuted($this->spoolId, true); return true; } /** * Run our 'accountmod' service with this information. Add this job as a child */ $editSpoolId = $this->createChildSpool('account', 'edit', $reference); if (isId($editSpoolId)) { return true; } throw new Exception('Cannot initiate an "AccountMod" override service for the AccountAdd spool ' . $this->spoolId); } /** * Ok, we didn't find a match. Run the "accountquery" service and associate it with this service */ $querySpoolId = $this->createChildSpool('account', 'query', $this->spoolData['accountingspoolnode']); if (isId($querySpoolId)) { return true; } throw new Exception('Cannot initiate an "AccountQuery" override service for the AccountAdd spool ' . $this->spoolId); } throw new Exception('An error occured when trying to handle the response from the AccountAdd spool ' . $this->spoolId); } /** * Account was successfully added, now all we need to do is to store the association information for this account */ $listid = trim(@(string) $this->data->info->AccountRet->ListID); $sequence = trim(@(string) $this->data->info->AccountRet->EditSequence); if ($listid !== '' && $sequence !== '') { $reference = array('ListID' => $listid, 'EditSequence' => $sequence, 'Name' => $this->spoolData['accountingspoolnode']['Name'], 'AccountType' => $this->spoolData['accountingspoolnode']['AccountType']); $this->quickbooks->setAccountingReference($this->spoolData['accountingspoolnode'], 'account', $reference); return true; } throw new Exception('Cannot insert the account using the information in the AccountAdd spool ' . $this->spoolId); }
/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * If we failed to insert this record, then check the response status code. If the code is 3100 'Name is not unique' then we execute the required * services to 'edit' this customer */ if (($code = parent::handleResponse()) !== true) { if ($code == 3100) { /** * Just quickly check to see if we already have the ListID for this customer group first. If we do then we just saved a 'pricelevelquery' SOAP call */ $reference = $this->getAccountingReference($this->spoolData['accountingspoolnodeid'], 'customergroup'); if ($reference) { /** * Run our 'pricelevelmod' service with this information. Add this job as a child */ $editSpoolId = $this->createChildSpool('customergroup', 'edit', $this->spoolData['accountingspoolnode']); if (isId($editSpoolId)) { return true; } throw new Exception('Cannot initiate an "PriceLEvelMod" override service for the PriceLevelAdd spool ' . $this->spoolId); } $servicedata = array('info' => $object); /** * Ok, we didn't find a match. Run the "pricelevelquery" service and associate it with this service */ $querySpoolId = $this->createChildSpool('customergroup', 'query', $this->spoolData['accountingspoolnode']); if (isId($querySpoolId)) { return true; } throw new Exception('Cannot initiate an "PriceLevelQuery" override service for the PriceLevelAdd spool ' . $this->spoolId); } throw new Exception('An error occured when trying to handle the response from the PriceLevelAdd spool ' . $this->spoolId); } /** * Customer group was successfully added, now all we need to do is to store the association information for this customer group */ $listid = trim(@(string) $this->data->info->PriceLevelRet->ListID); $sequence = trim(@(string) $this->data->info->PriceLevelRet->EditSequence); if ($listid !== '' && $sequence !== '') { $reference = array('ListID' => $listid, 'EditSequence' => $sequence); $this->setAccountingReference($this->spoolData['accountingspoolnodeid'], 'customergroup', $reference); return true; } throw new Exception('Cannot insert the customer group using the information in the PriceLEvelAdd spool ' . $this->spoolId); }
/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * If QuickBooks cannot find our account then query it for the proper information with the 'accountquery' service */ if (($code = parent::handleResponse()) !== true) { /** * 3120 means the record cannot be found and 3200 means that the EditSequence is out of sync. Either way the reference data is stale */ if ($code == 3120 || $code == 3200) { /** * Ok, we didn't find a match. Run the "accountquery" service and associate it with this service */ $querySpoolId = $this->createChildSpool('account', 'query', $this->spoolData['accountingspoolnode']); if (isId($querySpoolId)) { return true; } throw new Exception('Cannot initiate an "AccountQuery" override service for the AccountMod spool ' . $this->spoolId); } throw new Exception('An error occured when trying to handle the response from the AccountMod spool ' . $this->spoolId); } /** * Save the ref id if we can. Find the account first using the name and then associate the ref id with that account. This should not determine * the outcome of this mehtod as the account has already been inserted into QuickBooks by now */ $listid = trim(@(string) $this->data->info->AccountRet->ListID); $sequence = trim(@(string) $this->data->info->AccountRet->EditSequence); if ($listid !== '' && $sequence !== '') { $reference = array('ListID' => $listid, 'EditSequence' => $sequence, 'Name' => $this->spoolData['accountingspoolnode']['Name'], 'AccountType' => $this->spoolData['accountingspoolnode']['AccountType']); $this->quickbooks->setAccountingReference($this->spoolData['accountingspoolnode'], 'account', $reference); return true; } throw new Exception('Cannot insert the account using the information in the AccountMod spool ' . $this->spoolId); }
/** * Handle response from a request * * Method will handle the response from a request * * @access protected * @return bool true if the response was successful and handled correctly, FALSE otherwise */ protected function response() { /** * If we failed to insert this record, then check the response status code. If there is an error code then just die as each sales order should * be unique */ if (($code = parent::handleResponse()) !== true) { throw new Exception('An error occured when trying to handle the response from the SalesOrderEdit spool ' . $this->spoolId); } /** * SalesOrder was successfully added, now all we need to do is to store the association information for this order and decerement the stock on hand levels */ $txnid = trim(@(string) $this->data->info->SalesOrderRet->TxnID); $sequence = trim(@(string) $this->data->info->SalesOrderRet->EditSequence); if ($txnid !== '' && $sequence !== '') { $reference = array('TnxID' => $txnid, 'EditSequence' => $sequence); $this->quickbooks->setAccountingReference($this->spoolData['accountingspoolnodeid'], 'order', $reference); /** * Next we need to save the order - product association id that QuickBooks use */ foreach ($this->data->info->SalesOrderRet->SalesOrderLineRet as $lineItem) { $productId = null; foreach ($this->spoolData['accountingspoolnode']['products'] as $key => $product) { if ($product['prodname'] == $lineItem->Desc) { $productId = $product['productid']; } } if (!isId($productId)) { continue; } $itemID = array('TnxID' => $txnid, 'EditSequence' => $sequence, 'ProductID' => $productId); $itemReference = array('TnxID' => $txnid, 'EditSequence' => $sequence, 'ProductID' => $productId, 'TxnLineID' => (string) $lineItem->TxnLineID); $this->quickbooks->setAccountingReference($itemID, 'orderlineitem', $itemReference); } /** * Now assign a child spool to adjust all the product quantity levels but only if we have version 4.0 or above */ if ($this->quickbooks->compareClientVersion('4.0')) { $products = array(); $prevProds = array(); $prevSpoolId = null; /** * Run through the previous ordered products so we can deduct them first. These need to be in a separate sppol as QuickBooks can't handle * 2 or more of the same items in the one transaction */ if (isset($this->spoolData['accountingspoolnode']['previous'])) { foreach ($this->spoolData['accountingspoolnode']['previous']['products'] as $key => $product) { $reference = $this->quickbooks->getAccountingReference($product['productid'], 'product'); if (!$reference) { throw new Exception('Cannot find the product account reference data (Prod# ' . $product['productid'] . ') for the SalesOrderEdit spool ' . $this->spoolId); } $prevProds[] = array('ListID' => $reference['ListID'], 'QuantityDifference' => $product['prodorderquantity']); } if (!empty($prevProds)) { $prevSpoolId = $this->createChildSpool('inventorylevel', 'add', $prevProds); } } /** * Now for the current ordered products */ foreach ($this->spoolData['accountingspoolnode']['products'] as $key => $product) { $reference = $this->quickbooks->getAccountingReference($product['productid'], 'product'); if (!$reference) { throw new Exception('Cannot find the product account reference data (Prod# ' . $product['productid'] . ') for the SalesOrderEdit spool ' . $this->spoolId); } $products[] = array('ListID' => $reference['ListID'], 'QuantityDifference' => $product['prodorderquantity'] * -1); } if (empty($products)) { throw new Exception('Cannot load any products for the "InventoryAdjustmentAdd" child service for the SalesOrderEdit spool ' . $this->spoolId); } /** * Leave the previous child spool as the current one FI htere is one */ if (isId($prevSpoolId)) { $setAsCurrent = false; } else { $setAsCurrent = true; } $adjustSpoolId = $this->createChildSpool('inventorylevel', 'add', $products, $setAsCurrent); if (isId($adjustSpoolId)) { return true; } throw new Exception('Cannot initiate an "InventoryAdjustmentAdd" child service for the SalesOrderEdit spool ' . $this->spoolId); } return true; } throw new Exception('Cannot insert the order using the information in the SalesOrderEdit spool ' . $this->spoolId); }