function AdjustInvoice($taxSvcSoapClient, $invoiceNumber, $companyCode)
{
    // first find the document to adjust
    $request = new GetTaxHistoryRequest();
    $request->setCompanyCode($companyCode);
    // Dashboard Company Code
    $request->setDocType(DocumentType::$SalesInvoice);
    $request->setDetailLevel(DetailLevel::$Tax);
    // we need fully populated GetTaxRequest
    $request->setDocCode($invoiceNumber);
    try {
        $result = $taxSvcSoapClient->getTaxHistory($request);
        if ($result->getResultCode() != SeverityLevel::$Success) {
            foreach ($result->getMessages() as $msg) {
                echo $msg->getName() . ": " . $msg->getSummary() . "\n";
            }
        } else {
            $adjreq = new AdjustTaxRequest();
            $adjreq->setAdjustmentReason(8);
            $adjreq->setAdjustmentDescription("Because I Said So");
            /*
            AdjustMentReason Codes: 0 Not Adjusted, 1 Sourcing Issue, 2 Reconciled with General Ledger,
                 3 Exemption Certificate Applied, 4 Price or Quantity Adjusted, 5 Item Returned,
                 6 Item Exchanged, 7 Bad Debt, 8 Other (Explain - Must provide AdjustmentDescription)
            */
            $gtreq = $result->getGetTaxRequest();
            $STDIN = fopen('php://stdin', 'r');
            echo "Enter New Amount for Line 1: ";
            $amt = rtrim(fgets($STDIN));
            $gtreq->getLine("1")->setAmount($amt);
            $adjreq->setGetTaxRequest($gtreq);
            echo "Calling AdjustTax\n";
            $adjres = $taxSvcSoapClient->AdjustTax($adjreq);
            if ($adjres->getResultCode() != SeverityLevel::$Success) {
                echo "AdjustTax returned " . $adjres->getResultCode() . "\n";
                foreach ($result->getMessages() as $msg) {
                    echo $msg->getName() . ": " . $msg->getSummary() . "\n";
                }
            } else {
                echo "Invoice " . $adjres->getDocCode() . " Adjusted";
            }
        }
    } catch (SoapFault $exception) {
        $msg = "Exception: ";
        if ($exception) {
            $msg .= $exception->faultstring;
        }
        echo $msg . "\n";
        echo $client->__getLastRequest() . "\n";
        echo $client->__getLastResponse() . "\n";
    }
}
 function testAdjustTax()
 {
     global $client;
     $dateTime = new DateTime();
     $docCode = "PHPAdjustTaxTest" . date_format($dateTime, "dmyGis");
     $getTaxRequest = $this->CreateTaxRequest($docCode);
     $getTaxRequest->setCommit(true);
     $getTaxResult = $client->getTax($getTaxRequest);
     $this->assertEqual(SeverityLevel::$Success, $getTaxResult->getResultCode());
     $adjustTaxRequest = new AdjustTaxRequest();
     $adjustTaxRequest->setAdjustmentReason(8);
     $adjustTaxRequest->setAdjustmentDescription("For testing");
     $getTaxRequest->getLine("1")->setAmount(2000);
     $adjustTaxRequest->setGetTaxRequest($getTaxRequest);
     $adjustTaxResult = $client->adjustTax($adjustTaxRequest);
     $this->assertEqual(SeverityLevel::$Success, $adjustTaxResult->getResultCode());
     $var = $adjustTaxResult->getTotalTax();
     $cancelRequest = new CancelTaxRequest();
     $cancelRequest->setDocCode($getTaxRequest->getDocCode());
     //	$cancelRequest->setDocId($getTaxResult->getDocId());
     $cancelRequest->setDocType($getTaxRequest->getDocType());
     $cancelRequest->setCompanyCode($getTaxRequest->getCompanyCode());
     $cancelRequest->setCancelCode(CancelCode::$AdjustmentCancelled);
     $cancelResult = $client->cancelTax($cancelRequest);
     $this->assertEqual(SeverityLevel::$Success, $cancelResult->getResultCode());
     //Change status to DocDeleted and call cancel again
     $cancelRequest->setCancelCode(CancelCode::$DocDeleted);
     $cancelResult = $client->cancelTax($cancelRequest);
     $this->assertEqual(SeverityLevel::$Success, $cancelResult->getResultCode());
 }