function showPackageDetail(&$clsRpt, &$package)
{
    //---------------------------------------------------------------------
    //
    //---------------------------------------------------------------------
    $lPackageID = $package->lKeyID;
    $attributes = new stdClass();
    $attributes->divID = 'aucPackage' . $lPackageID;
    $attributes->divImageID = 'aucDiv' . $lPackageID;
    $attributes->lUnderscoreWidth = 600;
    openBlock('Package ' . str_pad($lPackageID, 5, '0', STR_PAD_LEFT) . ': ' . $package->strPackageSafeName . strLinkView_AuctionPackageRecord($lPackageID, 'View package record', true), strLinkAdd_AuctionItem($lPackageID, 'Add item to this package', true) . ' ' . strLinkAdd_AuctionItem($lPackageID, 'Add item to this package', false), $attributes);
    echoT('<br>');
    if ($package->lNumItems == 0) {
        echoT('<i>There are currently no items in the package <b>"' . $package->strPackageSafeName . '"</b><br><br>');
    } else {
        writeAuctionItemsTable($package, $package->items, false);
    }
    $attributes = new stdClass();
    $attributes->bCloseDiv = true;
    closeBlock($attributes);
}
function writeAuctionPackageTable($lAuctionID, &$auction, &$packages, $bDescriptions)
{
    //---------------------------------------------------------------------
    //
    //---------------------------------------------------------------------
    echoT('
         <table class="enpRpt">');
    echoT('
         <tr>
            <td class="enpRptLabel">
               package ID
            </td>
            <td class="enpRptLabel">
               &nbsp;
            </td>
            <td class="enpRptLabel">
               &nbsp;
            </td>
            <td class="enpRptLabel">
               Bid<br>Sheet
            </td>
            <td class="enpRptLabel">
               Name
            </td>
            <td class="enpRptLabel" nowrap>
               # Items
            </td>
            <td class="enpRptLabel">
               Est. Value
            </td>
            <td class="enpRptLabel">
               Winner
            </td>
            <td class="enpRptLabel">
               Winning Bid
            </td>
            <td class="enpRptLabel">
               Fulfilled?
            </td>
         </tr>');
    $curEstValueTot = $curWinBidTot = $curFullfillTot = 0.0;
    $lTotItems = 0;
    foreach ($packages as $package) {
        $lPackageID = $package->lKeyID;
        $lWinnerID = $package->lBidWinnerID;
        $lGiftID = $package->lGiftID;
        $curEstValueTot += $package->curEstValue;
        $lTotItems += $package->lNumItems;
        if (is_null($lWinnerID)) {
            $strWinner = 'n/a ' . strLink_SetPackageWinner($lPackageID, 'Set Winner', true);
            $strWinnerStyle = 'text-align: center;';
            $strWinningBid = 'n/a';
            $strWinningBidStyle = 'text-align: center;';
            $strFulfilled = 'No';
            $strFulfilledStyle = 'text-align: center;';
            $strPeopleLink = '';
        } else {
            $curWinBidTot += $package->curWinBidAmnt;
            $strWinner = $package->bidWinner->strLink . '&nbsp;' . $package->bidWinner->strSafeNameLF;
            $strWinnerStyle = '';
            $strWinningBid = number_format($package->curWinBidAmnt, 2);
            $strWinningBidStyle = 'text-align: right;';
            if (is_null($lGiftID)) {
                $strFulfilled = 'No' . strLink_SetPackageFulfill($lPackageID, 'Fulfill/receive payment', true);
                $strFulfilledStyle = 'text-align: center;';
            } else {
                $strFulfilled = number_format($package->curActualGiftAmnt, 2) . '&nbsp;' . strLinkView_GiftsRecord($lGiftID, 'View gift record', true);
                $strFulfilledStyle = '';
                $curFullfillTot += $package->curActualGiftAmnt;
            }
        }
        if (is_null($package->lBidSheetID)) {
            $strLinkPDF = 'n/a';
        } else {
            $strLinkPDF = strLink_PDF_PackageBidSheet($package->lBidSheetID, $lPackageID, 'Create PDF Bid Sheet', true, ' target="_blank" ');
        }
        echoT('
            <tr class="makeStripe">
               <td class="enpRpt" style="text-align: center;">' . str_pad($lPackageID, 5, '0', STR_PAD_LEFT) . '&nbsp;' . strLinkView_AuctionPackageRecord($lPackageID, 'View auction package', true) . '
               </td>
               <td class="enpRpt" style="text-align: center;">' . strLinkEdit_AuctionPackage($lAuctionID, $lPackageID, 'Edit package', true) . '
               </td>
               <td class="enpRpt" style="text-align: center;">' . strLinkRem_AuctionPackage($lAuctionID, $lPackageID, 'Remove Package', true, true) . '
               </td>
               <td class="enpRpt" style="text-align: center;">' . $strLinkPDF . '
               </td>
               <td class="enpRpt">' . $package->strPackageSafeName . '
               </td>
               <td class="enpRpt" style="text-align: center; padding-left: 7pt;" nowrap>' . number_format($package->lNumItems) . '&nbsp;' . strLinkView_AuctionItemsViaPID($lPackageID, 'View package items', true) . '&nbsp;' . strLinkAdd_AuctionItem($lPackageID, 'Add new item', true) . '
               </td>
               <td class="enpRpt" style="text-align: right;">' . $auction->strCurrencySymbol . ' ' . number_format($package->curEstValue, 2) . '
               </td>
               <td class="enpRpt" style="' . $strWinnerStyle . '">' . $strWinner . '
               </td>
               <td class="enpRpt" style="' . $strWinningBidStyle . '">' . $strWinningBid . '
               </td>
               <td class="enpRpt"style="' . $strFulfilledStyle . '">' . $strFulfilled . '
               </td>
            </tr>');
    }
    echoT('
         <tr class="makeStripe">
            <td class="enpRpt" colspan="5">
               <b>Total:</b>
            </td>
            <td class="enpRpt" style="width: 40pt; text-align: center;"><b>' . number_format($lTotItems) . '</b>
            </td>
            <td class="enpRpt" style="width: 40pt; text-align: right;"><b>' . number_format($curEstValueTot, 2) . '</b>
            </td>
            <td class="enpRpt" >
               &nbsp;
            </td>
            <td class="enpRpt" style="width: 40pt; text-align: right;"><b>' . number_format($curWinBidTot, 2) . '</b>
            </td>
            <td class="enpRpt" style="width: 40pt; text-align: right;"><b>' . number_format($curFullfillTot, 2) . '</b>
            </td>
         </tr>');
    echoT('</table><br><br>');
}
function showPackageInfo(&$clsRpt, &$package, &$auction, $lPackageID, $lAuctionID)
{
    //---------------------------------------------------------------------
    //
    //---------------------------------------------------------------------
    global $genumDateFormat;
    openBlock('Silent Auction Package', strLinkEdit_AuctionPackage($lAuctionID, $lPackageID, 'Edit package information', true) . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . strLinkRem_AuctionPackage($lAuctionID, $lPackageID, 'Remove this package record', true, true));
    echoT($clsRpt->openReport());
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Package ID:') . $clsRpt->writeCell(str_pad($lPackageID, 5, '0', STR_PAD_LEFT)) . $clsRpt->closeRow());
    // Package Name
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Name:') . $clsRpt->writeCell($package->strPackageSafeName) . $clsRpt->closeRow());
    // Min bid amount
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Min. Bid Amount:') . $clsRpt->writeCell($auction->strCurrencySymbol . ' ' . number_format($package->curMinBidAmnt, 2)) . $clsRpt->closeRow());
    // Min bid increment
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Min. Bid Increment:') . $clsRpt->writeCell($auction->strCurrencySymbol . ' ' . number_format($package->curMinBidInc, 2)) . $clsRpt->closeRow());
    // Buy it now amount
    if (is_null($package->curBuyItNowAmnt)) {
        $strBuyItNow = '<i>Not set for this package</i>';
    } else {
        $strBuyItNow = $auction->strCurrencySymbol . ' ' . number_format($package->curBuyItNowAmnt, 2);
    }
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('"Buy it now" amount:') . $clsRpt->writeCell($strBuyItNow) . $clsRpt->closeRow());
    // Reserve
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Reserve:') . $clsRpt->writeCell($auction->strCurrencySymbol . ' ' . number_format($package->curReserveAmnt, 2)) . $clsRpt->closeRow());
    // default bidsheet
    if (is_null($package->lBidSheetID) || is_null($package->tInfo) || is_null($package->lTemplateID)) {
        echoT($clsRpt->openRow() . $clsRpt->writeLabel('Bid Sheet:') . $clsRpt->writeCell('<i>Not set!</i>') . $clsRpt->closeRow());
    } else {
        echoT($clsRpt->openRow() . $clsRpt->writeLabel('Bid Sheet:') . $clsRpt->writeCell(htmlspecialchars($package->strSheetName) . '&nbsp;' . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . strLinkView_BidSheetRecord($package->lBidSheetID, 'View bid sheet template', true) . '&nbsp;(based on template "' . $package->tInfo->title . '")') . $clsRpt->closeRow());
        echoT($clsRpt->openRow() . $clsRpt->writeLabel('Bid Sheet PDF:') . $clsRpt->writeCell(strLink_PDF_PackageBidSheet($package->lBidSheetID, $lPackageID, 'Create bid sheet for this package', true, ' target="_blank" ') . '&nbsp;' . strLink_PDF_PackageBidSheet($package->lBidSheetID, $lPackageID, 'Create bid sheet for this package', false, ' target="_blank" ')) . $clsRpt->closeRow());
    }
    // # items
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('# Auction Items:') . $clsRpt->writeCell(number_format($package->lNumItems) . '&nbsp;' . strLinkView_AuctionItemsViaPID($lPackageID, 'View package items', true) . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . strLinkAdd_AuctionItem($lPackageID, 'Add new item', true)) . $clsRpt->closeRow());
    // Est. Value of Items
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Est. Value:') . $clsRpt->writeCell($auction->strCurrencySymbol . ' ' . number_format($package->curEstValue, 2)) . $clsRpt->closeRow());
    // Out of pocket Expenses
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Out-of-Pocket:') . $clsRpt->writeCell($auction->strCurrencySymbol . ' ' . number_format($package->curOutOfPocket, 2)) . $clsRpt->closeRow());
    // Public Notes
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Public Notes:') . $clsRpt->writeCell(nl2br(htmlspecialchars($package->strDescription))) . $clsRpt->closeRow());
    // Private Notes
    echoT($clsRpt->openRow() . $clsRpt->writeLabel('Private Notes:') . $clsRpt->writeCell(nl2br(htmlspecialchars($package->strInternalNotes))) . $clsRpt->closeRow());
    echoT($clsRpt->closeReport());
    closeBlock();
}
<?php

echoT(strLinkAdd_AuctionItem($lPackageID, 'Add new item to this package', true) . '&nbsp;' . strLinkAdd_AuctionItem($lPackageID, 'Add new item to this package', false) . '<br><br>');
if ($lNumItems == 0) {
    echoT('<i>There are currently no items in the package <b>"' . $package->strPackageSafeName . '"</b><br><br>');
    return;
} else {
    writeAuctionItemsTable($package, $items, false);
}