Accounting Software
Small Business Software Estimating Software
Contact SoftwareInventory SoftwareInventory Tracking SoftwareInventory Management SoftwareInventory Control SoftwareCustomer Management SoftwareBusiness Management Software

Contract Preferences (Source Code)

Link to: header | prefs directory

Copyright Turtle Creek Software 1996-2006. All Rights Reserved.

Comments

CContractPreferences

This class manages contract writing preferences for the Goldenseal accounting software,
project management software and contract writing software.

It is the storage object for contract preferences. This includes stock language
for contract writing, plus text substitution phrases so Goldenseal can
fill in contract details such as item prices, item quantities and specific
info for the client and contractor.

SUPERCLASS = DB_PersistentObject

Constructor

/******************************************************************************
default constructor
******************************************************************************/
CContractPreferences::CContractPreferences()
{
mCostDisplay = mQuantityDisplay = contract_itemspecs;

mEndSafetyTag = tag_endsafetytag; // TCS 9/8/02
}

Source Code

/*********************************************************************************

GetFileLength TCS 5/7/02

return the file length used by this object

*********************************************************************************/
NeoSize CContractPreferences::GetFileLength(const CNeoFormat *aFormat) const
{
return THE_SUPERCLASS::GetFileLength(aFormat) +
mSubcontractorText.FileLength(cStandardTextLen) +
mContractorText.FileLength(cStandardTextLen) +
mApproxCostText.FileLength(cStandardTextLen) +
mApproxQuantityText.FileLength(cStandardTextLen) +
mExactCostText.FileLength(cStandardTextLen) +
mExactQuantityText.FileLength(cStandardTextLen) +
mSpareString.FileLength(cStandardTextLen) +
mScopeHeadingText.FileLength(cStandardTextLen) + // bugfix TCS 1/27/04
mLandMAllowanceText.FileLength(cStandardTextLen) +
mMatAllowanceText.FileLength(cStandardTextLen) +
mSpelledCostText.FileLength(cStandardTextLen) +
mSpelledQuantityText.FileLength(cStandardTextLen) +

mContractorMatchText.FileLength(cMenuTextLen) +
mQtyMatchText.FileLength(cMenuTextLen) +
mCostMatchText.FileLength(cMenuTextLen) +
mSpelloutMatchText.FileLength(cMenuTextLen) +
mProjDescriptionMatchText.FileLength(cMenuTextLen) +
mClientNameMatchText.FileLength(cMenuTextLen) +
mClientAddressMatchText.FileLength(cMenuTextLen) +
mProjectCostMatchText.FileLength(cMenuTextLen) +
mDownPaymentMatchText.FileLength(cMenuTextLen) +
mRetainageMatchText.FileLength(cMenuTextLen) +
mStartDateMatchText.FileLength(cMenuTextLen) +
mFinishDateMatchText.FileLength(cMenuTextLen) +
mBizNameMatchText.FileLength(cMenuTextLen) +
mBizAddressMatchText.FileLength(cMenuTextLen) +
mUnitSizeMatchText.FileLength(cMenuTextLen) +
mAcceptDateMatchText.FileLength(cMenuTextLen) +
cFileLength;
}
/*********************************************************************************

GetMemberValue TCS 5/7/02

get the next number for an item

*********************************************************************************/
Boolean CContractPreferences::GetMemberValue(const TagType aTag, const TagType aType,
void *aValue) const
{
switch (aTag)
{
case tag_contractcostdisplay:
return ConvertEnumMember(mCostDisplay, MENU_ContractNumberPrefs, aValue, aType);
break;

case tag_contractquantdisplay:
return ConvertEnumMember(mQuantityDisplay, MENU_ContractNumberPrefs, aValue, aType);
break;

/*case tag_maxrepeats:
return ConvertMember(&mMaxRepeatClauses, type_long, aValue, aType);
break;*/

/*case tag_listheadertext:
return ConvertMember(&mListHeaderText, type_cstring, aValue, aType);
break;*/

case tag_contractortext:
return ConvertMember(&mContractorText, type_cstring, aValue, aType);
break;

case tag_approxcosttext:
return ConvertMember(&mApproxCostText, type_cstring, aValue, aType);
break;

case tag_approxquantitytext:
return ConvertMember(&mApproxQuantityText, type_cstring, aValue, aType);
break;

case tag_exactcosttext:
return ConvertMember(&mExactCostText, type_cstring, aValue, aType);
break;

case tag_exactquantitytext:
return ConvertMember(&mExactQuantityText, type_cstring, aValue, aType);
break;

case tag_subcontractortext:
return ConvertMember(&mSubcontractorText, type_cstring, aValue, aType);
break;

case tag_landmallowancetext:
return ConvertMember(&mLandMAllowanceText, type_cstring, aValue, aType);
break;

case tag_matallowancetext:
return ConvertMember(&mMatAllowanceText, type_cstring, aValue, aType);
break;

case tag_spelledcosttext:
return ConvertMember(&mSpelledCostText, type_cstring, aValue, aType);
break;

case tag_spelledquantitytext:
return ConvertMember(&mSpelledQuantityText, type_cstring, aValue, aType);
break;

case tag_scopeheading:
return ConvertMember(&mScopeHeadingText, type_cstring, aValue, aType);
break;

case tag_matchcontractor:
return ConvertMember(&mContractorMatchText, type_cstring, aValue, aType);
break;

case tag_matchcost:
return ConvertMember(&mCostMatchText, type_cstring, aValue, aType);
break;

case tag_matchclientname:
return ConvertMember(&mClientNameMatchText, type_cstring, aValue, aType);
break;

case tag_matchclientaddr:
return ConvertMember(&mClientAddressMatchText, type_cstring, aValue, aType);
break;

case tag_matchdownpayment:
return ConvertMember(&mDownPaymentMatchText, type_cstring, aValue, aType);
break;

case tag_matchfinishdate:
return ConvertMember(&mFinishDateMatchText, type_cstring, aValue, aType);
break;

case tag_matchprojcost:
return ConvertMember(&mProjectCostMatchText, type_cstring, aValue, aType);
break;

case tag_matchprojdescript:
return ConvertMember(&mProjDescriptionMatchText, type_cstring, aValue, aType);
break;

case tag_matchquantity:
return ConvertMember(&mQtyMatchText, type_cstring, aValue, aType);
break;

case tag_matchretainage:
return ConvertMember(&mRetainageMatchText, type_cstring, aValue, aType);
break;

case tag_matchspellout:
return ConvertMember(&mSpelloutMatchText, type_cstring, aValue, aType);
break;

case tag_matchstartdate:
return ConvertMember(&mStartDateMatchText, type_cstring, aValue, aType);
break;

case tag_matchbizname:
return ConvertMember(&mBizNameMatchText, type_cstring, aValue, aType);
break;

case tag_matchbizaddress:
return ConvertMember(&mBizAddressMatchText, type_cstring, aValue, aType);
break;

case tag_unitsize: // TCS 5/21/02
return ConvertMember(&mUnitSizeMatchText, type_cstring, aValue, aType);
break;

case tag_acceptdate: // TCS 5/21/02
return ConvertMember(&mAcceptDateMatchText, type_cstring, aValue, aType);
break;

default:
return THE_SUPERCLASS::GetMemberValue(aTag, aType, aValue);
break;
}
}
/*********************************************************************************

SetMemberValue TCS 5/7/02

set the value of the member with the given tag

*********************************************************************************/
Boolean CContractPreferences::SetMemberValue(const TagType aTag, const TagType aType,
const void *aValue)
{
switch (aTag)
{
case tag_contractcostdisplay: // TCS 5/10/02
return ConvertMember(aValue, aType, &mCostDisplay, type_enum);
break;

case tag_contractquantdisplay:
return ConvertMember(aValue, aType, &mQuantityDisplay, type_enum);
break;

/*case tag_maxrepeats:
return ConvertMember(aValue, aType, &mMaxRepeatClauses, type_long);
break;*/

/*case tag_listheadertext:
return SafeConvertString(aValue, aType, &mListHeaderText);
break;*/

case tag_contractortext:
return SafeConvertString(aValue, aType, &mContractorText);
break;

case tag_approxcosttext:
return SafeConvertString(aValue, aType, &mApproxCostText);
break;

case tag_approxquantitytext:
return SafeConvertString(aValue, aType, &mApproxQuantityText);
break;

case tag_exactcosttext:
return SafeConvertString(aValue, aType, &mExactCostText);
break;

case tag_exactquantitytext:
return SafeConvertString(aValue, aType, &mExactQuantityText);
break;

case tag_subcontractortext:
return SafeConvertString(aValue, aType, &mSubcontractorText);
break;

case tag_landmallowancetext:
return SafeConvertString(aValue, aType, &mLandMAllowanceText);
break;

case tag_matallowancetext:
return SafeConvertString(aValue, aType, &mMatAllowanceText);
break;

case tag_spelledcosttext:
return SafeConvertString(aValue, aType, &mSpelledCostText);
break;

case tag_spelledquantitytext:
return SafeConvertString(aValue, aType, &mSpelledQuantityText);
break;

case tag_scopeheading:
return SafeConvertString(aValue, aType, &mScopeHeadingText);
break;

case tag_matchcontractor:
return SafeConvertString(aValue, aType, &mContractorMatchText);
break;

case tag_matchcost:
return SafeConvertString(aValue, aType, &mCostMatchText);
break;

case tag_matchclientname:
return SafeConvertString(aValue, aType, &mClientNameMatchText);
break;

case tag_matchclientaddr:
return SafeConvertString(aValue, aType, &mClientAddressMatchText);
break;

case tag_matchdownpayment:
return SafeConvertString(aValue, aType, &mDownPaymentMatchText);
break;

case tag_matchfinishdate:
return SafeConvertString(aValue, aType, &mFinishDateMatchText);
break;

case tag_matchprojcost:
return SafeConvertString(aValue, aType, &mProjectCostMatchText);
break;

case tag_matchprojdescript:
return SafeConvertString(aValue, aType, &mProjDescriptionMatchText);
break;

case tag_matchquantity:
return SafeConvertString(aValue, aType, &mQtyMatchText);
break;

case tag_matchretainage:
return SafeConvertString(aValue, aType, &mRetainageMatchText);
break;

case tag_matchspellout:
return SafeConvertString(aValue, aType, &mSpelloutMatchText);
break;

case tag_matchstartdate:
return SafeConvertString(aValue, aType, &mStartDateMatchText);
break;

case tag_matchbizname:
return SafeConvertString(aValue, aType, &mBizNameMatchText);
break;

case tag_matchbizaddress:
return SafeConvertString(aValue, aType, &mBizAddressMatchText);
break;

case tag_unitsize: // TCS 5/21/02
return SafeConvertString(aValue, aType, &mUnitSizeMatchText);
break;

case tag_acceptdate: // TCS 5/21/02
return SafeConvertString(aValue, aType, &mAcceptDateMatchText);
break;

default:
return THE_SUPERCLASS::SetMemberValue(aTag, aType, aValue);
break;
}
}
/*********************************************************************************

ReadObject TCS 5/7/02

read the persistent object's data in from a stream

*********************************************************************************/
void CContractPreferences::ReadObject(CNeoStream *aStream, const TagType aTag)
{
TCS_FailNILMsg(aStream, TCS_GetErrString(errID_BadStream));

CNeoDebugImport checker(aStream, this, cCheckTooSmall); // TCS 2/24/00

THE_SUPERCLASS::ReadObject(aStream, aTag);

if (!IsIOValid()) // TCS 2/5/02
return;

ReadTextFromStream(aStream, &mSubcontractorText);
ReadTextFromStream(aStream, &mContractorText);
ReadTextFromStream(aStream, &mApproxCostText);
ReadTextFromStream(aStream, &mApproxQuantityText);
ReadTextFromStream(aStream, &mExactCostText);
ReadTextFromStream(aStream, &mExactQuantityText);
ReadTextFromStream(aStream, &mSpareString);
ReadTextFromStream(aStream, &mScopeHeadingText);
ReadTextFromStream(aStream, &mLandMAllowanceText);
ReadTextFromStream(aStream, &mMatAllowanceText);
ReadTextFromStream(aStream, &mSpelledCostText);
ReadTextFromStream(aStream, &mSpelledQuantityText);

ReadTextFromStream(aStream, &mContractorMatchText);
ReadTextFromStream(aStream, &mQtyMatchText);
ReadTextFromStream(aStream, &mCostMatchText);
ReadTextFromStream(aStream, &mSpelloutMatchText);
ReadTextFromStream(aStream, &mProjDescriptionMatchText);
ReadTextFromStream(aStream, &mClientNameMatchText);
ReadTextFromStream(aStream, &mClientAddressMatchText);
ReadTextFromStream(aStream, &mProjectCostMatchText);
ReadTextFromStream(aStream, &mDownPaymentMatchText);
ReadTextFromStream(aStream, &mRetainageMatchText);
ReadTextFromStream(aStream, &mStartDateMatchText);
ReadTextFromStream(aStream, &mFinishDateMatchText);
ReadTextFromStream(aStream, &mBizNameMatchText);
ReadTextFromStream(aStream, &mBizAddressMatchText);
ReadTextFromStream(aStream, &mUnitSizeMatchText);
ReadTextFromStream(aStream, &mAcceptDateMatchText);

/// aStream->ReadChunk(&mSpareLong, cFileLength);

mSpareLong = aStream->ReadLong(); // mfs_sa rev 20feb2k3

mCostDisplay = aStream->ReadChar();
mQuantityDisplay = aStream->ReadChar();

mEndSafetyTag = aStream->ReadEndSafetyTag(this);

if (!IsValidEndTag(mEndSafetyTag)) // TCS 9/8/02
ReportDamagedObject(GetDBClassID(), GetDBID());
}
/*********************************************************************************

WriteObject TCS 5/7/02

write the persistent object's data to a stream

*********************************************************************************/
void CContractPreferences::WriteObject(CNeoStream *aStream, const TagType aTag)
{
TCS_FailNILMsg(aStream, TCS_GetErrString(errID_BadStream));

// make sure we have valid data to write TCS 9/8/02
if (!IsValidEndTag(mEndSafetyTag))
{
ReportDamagedObject(GetDBClassID(), GetDBID());
mEndSafetyTag = tag_endsafetytag; // TCS 11/26/02
}

CNeoDebugExport checker(aStream, this, cCheckTooSmall);
THE_SUPERCLASS::WriteObject(aStream, aTag);

WriteTextToStream(aStream, mSubcontractorText, cStandardTextLen);
WriteTextToStream(aStream, mContractorText, cStandardTextLen);
WriteTextToStream(aStream, mApproxCostText, cStandardTextLen);
WriteTextToStream(aStream, mApproxQuantityText, cStandardTextLen);
WriteTextToStream(aStream, mExactCostText, cStandardTextLen);
WriteTextToStream(aStream, mExactQuantityText, cStandardTextLen);
WriteTextToStream(aStream, mSpareString, cStandardTextLen);
WriteTextToStream(aStream, mScopeHeadingText, cStandardTextLen);
WriteTextToStream(aStream, mLandMAllowanceText, cStandardTextLen);
WriteTextToStream(aStream, mMatAllowanceText, cStandardTextLen);
WriteTextToStream(aStream, mSpelledCostText, cStandardTextLen);
WriteTextToStream(aStream, mSpelledQuantityText, cStandardTextLen);

WriteTextToStream(aStream, mContractorMatchText, cMenuTextLen);
WriteTextToStream(aStream, mQtyMatchText, cMenuTextLen);
WriteTextToStream(aStream, mCostMatchText, cMenuTextLen);
WriteTextToStream(aStream, mSpelloutMatchText, cMenuTextLen);
WriteTextToStream(aStream, mProjDescriptionMatchText, cMenuTextLen);
WriteTextToStream(aStream, mClientNameMatchText, cMenuTextLen);
WriteTextToStream(aStream, mClientAddressMatchText, cMenuTextLen);
WriteTextToStream(aStream, mProjectCostMatchText, cMenuTextLen);
WriteTextToStream(aStream, mDownPaymentMatchText, cMenuTextLen);
WriteTextToStream(aStream, mRetainageMatchText, cMenuTextLen);
WriteTextToStream(aStream, mStartDateMatchText, cMenuTextLen);
WriteTextToStream(aStream, mFinishDateMatchText, cMenuTextLen);
WriteTextToStream(aStream, mBizNameMatchText, cMenuTextLen);
WriteTextToStream(aStream, mBizAddressMatchText, cMenuTextLen);
WriteTextToStream(aStream, mUnitSizeMatchText, cMenuTextLen);
WriteTextToStream(aStream, mAcceptDateMatchText, cMenuTextLen);

aStream->WriteLong(mSpareLong); // mfs_sa rev 20feb2k3

aStream->WriteChar(mCostDisplay);
aStream->WriteChar(mQuantityDisplay);

aStream->WriteEndSafetyTag(mEndSafetyTag, this);
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************

DoClauseSubstitutions TCS 5/9/02

fill in text, substituting any values

*********************************************************************************/
CTextString CContractPreferences::DoClauseSubstitutions(const CTextString &inString,
DB_PersistentObject *source, const CContract *contract) const
{
CBusinessInfo *bizInfo =
TCS_SAFE_CAST(gDBFile->GetFirstObject(id_BusinessInfo),
CBusinessInfo);
TCS_FailNILMsg(bizInfo, TCS_GetErrString(errID_BadPrefs));
DB_ObjectWatcher watcher(bizInfo);

CTextString outString = inString;

DoTextSubstitute(outString, mContractorMatchText, mContractorText);

if (source) // bugfix TCS 3/22/04
{
source->ReplaceMatchText(outString, mProjDescriptionMatchText, tag_details);
source->ReplaceMatchText(outString, mClientNameMatchText, tag_mainaccountfullname); // rev TCS 9/3/02
source->ReplaceMatchText(outString, mClientAddressMatchText, tag_address, true);
source->ReplaceMatchText(outString, mProjectCostMatchText, tag_amount);
source->ReplaceMatchText(outString, mDownPaymentMatchText, tag_downpayment);
source->ReplaceMatchText(outString, mRetainageMatchText, tag_retainagepercent);
source->ReplaceMatchText(outString, mStartDateMatchText, tag_startdate);
source->ReplaceMatchText(outString, mFinishDateMatchText, tag_finishdate);
}

if (contract) // TCS 12/16/02
{
contract->ReplaceMatchText(outString, mAcceptDateMatchText, tag_acceptdate);
}

bizInfo->ReplaceMatchText(outString, mBizNameMatchText, tag_name);
bizInfo->ReplaceMatchText(outString, mBizAddressMatchText, tag_address, true);

return outString;
}
/*********************************************************************************

DoSpecSubstitutions TCS 5/10/02 rev 5/21/02

fill in text, substituting quantities and/or cost

*********************************************************************************/
CTextString CContractPreferences::DoSpecSubstitutions(const CTextString &inString,
const CMoney &quantity, const UInt8 inQuantityDisplay,
const CMoney &cost, const UInt8 inCostDisplay,
const CTextString &unitSizeText,
const CMoney &modifierAmount) const
{
CTextString outString = inString;
CTextString tempString, tempString2;
UInt8 quantityDisplay, costDisplay;

// figure format options TCS 5/21/02
if (mQuantityDisplay == contract_itemspecs)
quantityDisplay = inQuantityDisplay;
else
quantityDisplay = mQuantityDisplay;

if (mCostDisplay == contract_itemspecs)
costDisplay = inCostDisplay;
else
costDisplay = mCostDisplay;

// substitute contractor name
DoTextSubstitute(outString, mContractorMatchText, mContractorText);

// substitute quantity text
if (quantityDisplay == contract_nonumber)
{
DoTextSubstitute(outString, mQtyMatchText, cEmptyString);
}
else
{
if (quantityDisplay == contract_exactspelled ||
quantityDisplay == contract_approxspelled)
{
tempString = mSpelledQuantityText;
tempString2 = quantity.GetSpelledNumber();
DoTextSubstitute(tempString, mSpelloutMatchText, tempString2);
DoTextSubstitute(outString, mQtyMatchText, tempString);
}

if (quantityDisplay == contract_approx || quantityDisplay == contract_approxspelled)
DoTextSubstitute(outString, mQtyMatchText, mApproxQuantityText);
else
DoTextSubstitute(outString, mQtyMatchText, mExactQuantityText);

DoTextSubstitute(outString, mQtyMatchText, quantity.GetNumberString());
}

// substitute cost text
if (costDisplay == contract_nonumber)
{
DoTextSubstitute(outString, mCostMatchText, cEmptyString);
}
else
{
if (costDisplay == contract_exactspelled ||
costDisplay == contract_approxspelled)
{
tempString = mSpelledCostText;
tempString2 = cost.GetSpelledMoney();
DoTextSubstitute(tempString, mSpelloutMatchText, tempString2);
DoTextSubstitute(outString, mCostMatchText, tempString);
}

if (costDisplay == contract_approx || costDisplay == contract_approxspelled)
DoTextSubstitute(outString, mCostMatchText, mApproxCostText);
else
DoTextSubstitute(outString, mCostMatchText, mExactCostText);

DoTextSubstitute(outString, mCostMatchText, cost.GetCurrencyString());
}

// substitute unit size text TCS 5/21/01
DoTextSubstitute(outString, mUnitSizeMatchText, unitSizeText);

// substitute modifier amount. For now we just hard-code the
// match string. We'll eventually need to do a version update
// to store another string member TCS 9/3/02
DoTextSubstitute(outString, "ModifierDimension", modifierAmount.GetNumberString());

// handle singular/plural TCS 5/21/01
Boolean isSingular = quantity.IsSingular();
outString.SetSingular(isSingular);

// tidy up any dangling punctuation
outString.RemoveExtraPunctuation();
outString.RemoveExtraSpaces();

return outString;
}
/*********************************************************************************

FillDataReport TCS 9/7/02

fill in a diagnostic table that shows data field values.

*********************************************************************************/
void CContractPreferences::FillDataReport(CTCS_Table *table, CNeoStream *stream) const
{
TCS_FailNILMsg(table, TCS_GetErrString(errID_BadTable));
TCS_FailNILMsg(stream, TCS_GetErrString(errID_BadStream));

THE_SUPERCLASS::FillDataReport(table, stream);

FillFieldStringRow(table, stream, tag_listheadertext, mSubcontractorText);
FillFieldStringRow(table, stream, tag_contractortext, mContractorText);
FillFieldStringRow(table, stream, tag_approxcosttext, mApproxCostText);
FillFieldStringRow(table, stream, tag_approxquantitytext, mApproxQuantityText);
FillFieldStringRow(table, stream, tag_exactcosttext, mExactCostText);
FillFieldStringRow(table, stream, tag_exactquantitytext, mExactQuantityText);
FillFieldStringRow(table, stream, "mSpareString", mSpareString);
FillFieldStringRow(table, stream, tag_landmallowancetext, mLandMAllowanceText);
FillFieldStringRow(table, stream, tag_matallowancetext, mMatAllowanceText);
FillFieldStringRow(table, stream, tag_scopeheading, mScopeHeadingText);
FillFieldStringRow(table, stream, tag_spelledcosttext, mSpelledCostText);
FillFieldStringRow(table, stream, tag_spelledquantitytext, mSpelledQuantityText);

FillFieldStringRow(table, stream, tag_matchcontractor, mContractorMatchText);
FillFieldStringRow(table, stream, tag_matchquantity, mQtyMatchText);
FillFieldStringRow(table, stream, tag_matchcost, mCostMatchText);
FillFieldStringRow(table, stream, tag_matchspellout, mSpelloutMatchText);
FillFieldStringRow(table, stream, tag_matchprojdescript, mProjDescriptionMatchText);
FillFieldStringRow(table, stream, tag_matchclientname, mClientNameMatchText);
FillFieldStringRow(table, stream, tag_matchclientaddr, mClientAddressMatchText);
FillFieldStringRow(table, stream, tag_matchprojcost, mProjectCostMatchText);
FillFieldStringRow(table, stream, tag_matchdownpayment, mDownPaymentMatchText);
FillFieldStringRow(table, stream, tag_matchretainage, mRetainageMatchText);
FillFieldStringRow(table, stream, tag_matchstartdate, mStartDateMatchText);
FillFieldStringRow(table, stream, tag_matchfinishdate, mFinishDateMatchText);
FillFieldStringRow(table, stream, tag_matchbizname, mBizNameMatchText);
FillFieldStringRow(table, stream, tag_matchbizaddress, mBizAddressMatchText);
FillFieldStringRow(table, stream, tag_unitsize, mUnitSizeMatchText);
FillFieldStringRow(table, stream, tag_acceptdate, mAcceptDateMatchText);

FillFieldStockRow(table, stream, stockID_Expansion, cLongSize, mSpareLong);

FillFieldTagRow(table, stream, tag_contractcostdisplay, cCharSize, SInt32(mCostDisplay));
FillFieldTagRow(table, stream, tag_contractquantdisplay, cCharSize, SInt32(mQuantityDisplay));

FillEndSafetyTag(table, stream, mEndSafetyTag);
}