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

Audit Trail (Header)

Link to: source code | prefs directory

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

This class manages the audit trail for the Goldenseal accounting software,
small business management software, construction project management software and
construction accounting software.

class CAuditEntry : public DB_PersistentObject
{
public:

static CLASS_DESC *sDescriptor;
static DB_PersistentObject *MakeNew() { return TCS_NEW CAuditEntry; }

static void CreateAuditEntry(const UInt8 entryType,
DB_PersistentObject *sourceObject);

static void CreateMiscAuditEntry(const UInt8 entryType = entry_none, const DBid inClassID = 0);
CAuditEntry(const UInt8 entryType, DB_PersistentObject *source);
CAuditEntry(const UInt8 entryType = entry_none, const DBid inClassID = 0);
virtual ~CAuditEntry() {}

virtual NeoSize GetFileLength(const CNeoFormat *aFormat) const
{ return DB_PersistentObject::GetFileLength(aFormat) + cFileLength; }

// we don't bother implementing CopyFrom for an audit trail
// entry because it will never be duplicated
virtual void CopyFrom(DB_PersistentObject */*source*/, const UInt8 /*copyFlags*/) {}

virtual DBid GetDBClassID(void) const { return id_AuditEntry; }

virtual Boolean GetMemberValue(const TagType aTag, const TagType aType,
void *aValue) const;
virtual Boolean SetMemberValue(const TagType aTag, const TagType aType,
const void *aValue);

virtual void ReadObject(CNeoStream *aStream, const TagType aTag);
virtual void WriteObject(CNeoStream *aStream, const TagType aTag);

UInt8 GetEntryType() const { return mEntryType; }
UInt8 GetTransactionType() const { return mTransactionType; }

void FillAuditData(const UInt8 entryType,
DB_PersistentObject *sourceObject);
void FillAuditData(const UInt8 entryType, const DBid classID);

void FillFromAccount(DB_PersistentObject *sourceObject);
void FillFromTransaction(DB_PersistentObject *sourceObject);
void FillFromList(DB_PersistentObject *sourceObject);
void FillFromList(const DBid classID);
void FillDefaults();

// audit entries can never be changed
virtual Boolean HasLockedStatus() const { return true; }
virtual Boolean HasRecordLock() const { return true; } // TCS 12/20/00

virtual UInt8 GetDetailTransactionClass() const;
virtual DBid GetDetailTransactionID() const { return mTransactionID; } // TCS 11/15/99

virtual UInt8 GetMainAccountRefClass() const { return mMainAccountClass; }
virtual DBid GetMainAccountRefID() const { return mMainAccount; } // TCS 11/15/99

virtual UInt8 GetSecondAccountRefClass() const { return mSecondAccountClass; }
virtual DBid GetSecondAccountRefID() const { return mSecondAccount; } // TCS 11/15/99

virtual DBid GetMainAccountID() const { return mMainAccount; } // TCS 3/29/00
virtual DBClass GetMainAccountClass() const { return mMainAccountClass; } // TCS 3/29/00

virtual DBid GetSecondAccountID() const { return mSecondAccount; } // TCS 3/29/00
virtual DBClass GetSecondAccountClass() const { return mSecondAccountClass; } // TCS 3/29/00

CDate GetDate() const { return mAuditDate; }
CDate GetAuditDate() { return mAuditDate; }
CDate GetTransactionDate() { return mTransactionDate; }

virtual Boolean CanBeDeleted(const Boolean /*giveMessage*/ = true) const { return false; } // TCS 8/14/02

// we should never call these, but just to be safe we override, TCS 3/6/02
// since posting might cause re-entrant calls to more audit entries!
virtual void PostNewRecord(const UInt8 /*creationType*/) {}
virtual void PostDeletion(const Boolean /*postAudit*/ = true) {}
virtual void PostRecordChanged(const CMoney &/*oldAmount*/,
const Boolean /*accountChanged*/,
const Boolean /*jobChanged*/) {}

virtual void FillDataReport(CTCS_Table *table, CNeoStream *stream) const;

virtual void SetEndSafetyTag() { mEndSafetyTag = tag_endsafetytag; }

protected:

// copied members (none)

// non-copied members
DBid mMainAccount, // id of primary account
mSecondAccount, // id of secondary account, if any
mPasswordID, // pasword used for the data entry or change
mTransactionID; // reference number of transaction. We need to store
// this in case the source transaction was deleted
UInt8 mTransactionType,
mEntryType, // type of entry (changed, created, etc.)
mMainAccountClass,
mSecondAccountClass;

CMoney mAmount; // transaction amount

CDate mAuditDate,
mTransactionDate; // TCS 12/9/99

// calculated members
TagType mEndSafetyTag; // TCS 9/8/02

enum
{
cCopyFileLength = 0,

cFileLength = cCopyFileLength +
4*sizeof(DBid) +
4*sizeof(UInt8) +
sizeof(CMoney) +
2*sizeof(CDate) +
sizeof(TagType)
};
};