Accounting Software
Small Business Software Estimating Software
Inventory SoftwareInventory Tracking SoftwareInventory Control SoftwareInventory Management SoftwareConstruction Management SoftwareProject Management SoftwareBusiness Management Software

Base Transactions (Header)

Link to: source code | transactions directory

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

This class manages basic accounting transactions in the Goldenseal business management software,
estimating software, project management software and construction estimating software.

class DB_BaseTransaction : public DB_PersistentObject
{
public:

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

DB_BaseTransaction();
virtual ~DB_BaseTransaction() {}

virtual void CopyFrom(DB_PersistentObject *source, const UInt8 copyFlags = 0);

virtual NeoSize GetFileLength(const CNeoFormat *aFormat) const;

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

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);

// mJustImported is set to true during the import process,
// so posting operations will know that it's imported. After
// the posting is done, we turn the flag off again.
virtual void SetJustImported(const Boolean inValue = true) { mJustImported = inValue; }
virtual Boolean WasJustImported() const { return mJustImported; }

virtual void SetBeenPosted(const Boolean inValue = true) { mBeenPosted = inValue; }
virtual Boolean HasBeenPosted() const { return mBeenPosted; }

virtual void SetBeenReceivableBilled(const Boolean inValue = true) { mBeenRecvBilled = inValue; }
virtual Boolean HasBeenReceivableBilled() const { return mBeenRecvBilled; }

virtual void SetBeenTandMBilled(const Boolean inValue = true) { mBeenTandMBilled = inValue; }
virtual Boolean HasBeenTandMBilled() const { return mBeenTandMBilled; }

virtual void SetPaidInFull(const Boolean isPaid = true) { mBeenPaid = isPaid; } // subclasses override this
virtual Boolean HasBeenPaid() const { return mBeenPaid; }

virtual Boolean HasBeenPartPaid() const { return GetAmountPaid().IsPositive() && // TCS 7/21/99
(GetAmount() > GetAmountPaid()); } // rev TCS 12/18/99

virtual void SetBeenDeposited(const Boolean inValue = true) { mBeenDeposited = inValue; }
virtual Boolean HasBeenDeposited() const { return mBeenDeposited; }

virtual void SetIsInRemoteUse(const Boolean inUse = true) { mIsInRemoteUse = inUse; }
virtual Boolean IsInRemoteUse() const { return mIsInRemoteUse; }

virtual void SetStatus(const UInt8 inValue);

virtual void PostNewRecord(const UInt8 /*creationType*/) {}
virtual void PostDeletion(const Boolean /*postAudit*/ = true) {}
virtual void PostNewVoidRecord(const UInt8 /*creationType*/) {}
virtual void PostVoidRecordDeleted() {} // TCS 5/17/00

virtual void PrepareImportChange();
virtual void PostImportChange(const CMoney oldAmount);

// breakdowns and transactions generally do not need a name
virtual Boolean NeedsName() const { return false; } // TCS 1/29/01
virtual Boolean ForbidDuplicateNames() const { return false; } // TCS 7/25/01

virtual void SetSalesTaxAmount(const CMoney &/*inMoney*/) {} // TCS 4/25/01

virtual CMoney GetBilledAmount(const Boolean /*includeTax*/ = true) const;
virtual CMoney GetAdjustments() const { return 0; }

virtual CMoney GetAmount() const { return 0; }
virtual CMoney GetAmountPaid() const;
virtual CMoney GetAmountUnpaid() const { return 0; }
virtual CMoney GetAmountOverpaid() const { return GetAmountPaid() - GetAmount(); }

// subclasses should override if they store or calculate these values
virtual CDate GetBillingDate() const { return GetDate(); }
virtual CDate GetDiscountDate() const { return GetDate(); }
virtual CDate GetDatePaid() const { return GetDate(); }
virtual Boolean HasDate() const { return true; }

virtual void setDirty(const NeoDirty aReason = kNeoChanged);

virtual CTextString GetMainAccountName() const { return TCS_GetStockString(stockID_MissingItem); }

virtual Boolean FetchJobCostItemInfo(TJobCostItemArray &itemArray,
CTextString &catName,
const UInt8 costType);
virtual Boolean FillJobCostCatInfo(SJobCostCategoryInfo &costInfo,
const CMoney &amount, const DBClass transactionClass,
const UInt8 costType);
virtual Boolean FillJobCostCompareInfo(SJobCostCompareInfo &compareInfo,
const CMoney &amount, const DBClass transactionClass,
const UInt8 costType, const Boolean isEstimate);
virtual void FillCatSubcatInfo(TTwoLevelArray *twoLevelArray,
const DBid catID, const DBid subcatID,
const Boolean isCredit = false) const;
virtual void FillCatItemInfo(TReportGroupArray *catArray,
const DBid catID, const Boolean isCredit = false,
const Boolean isLocation = false) const;

virtual Boolean HasPaidStatus() const { return HasBeenPaid(); }
virtual Boolean HasUnpaidStatus() const { return !HasBeenPaid(); }

virtual UInt8 GetMainAccountClass() const { return mMainAccountClass; }
virtual void SetMainAccountClass(const DBClass classID);

virtual void SetCurrentUser(const DBid inID) { mCurrentUser = inID; }
virtual DBid GetCurrentUser() { return mCurrentUser; }

virtual Boolean IsMarked() const { return mIsMarked; }
virtual void SetIsMarked(const Boolean inValue) { mIsMarked = inValue; }

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

virtual CMoney GetCreditAmount() const { return GetAmount(); }
virtual CMoney GetDebitAmount() const { return 0; }

virtual Boolean GetSpareBoolean() const { return mBoolean; } // TCS 4/20/04
virtual Boolean GetFlexibleBoolean() const { return mBoolean; }
virtual void SetFlexibleBoolean(const Boolean inValue) { mBoolean = inValue; }

virtual Boolean IsInstantPayment() const { return mInstantPayment; }
virtual void SetIsInstantPayment(const Boolean inValue) { mInstantPayment = inValue; }

virtual Boolean IsCurrentlyDisplayed() const { return mDisplayingViewer != nil; }

virtual void SetDisplayingViewer(DB_RecordViewer *viewer) { mDisplayingViewer = viewer; }
virtual DB_RecordViewer *GetDisplayingViewer() { return mDisplayingViewer; }

virtual UInt8 GetCreationType() const;
virtual void SetCreationType(const UInt8 inValue) { mCreationType = inValue; }

virtual Boolean GetSpareBit() const { return mSpareBit; }
virtual void SetSpareBit(const Boolean inValue) { mSpareBit = inValue; }
protected:

// Copied Data
UInt8 mMainAccountClass, // class of the main account
// moved mMainAccount to subclasses TCS 3/1/00
mCreationType; // NEW METHOD-- how item was created // TCS 6/28/03

// Calculated Data.
// *** NEVER insert members before this bitfield!!!
UInt8 mJustImported:1, // used to flag items during import process TCS length change 6/8/00
mBeenPosted:1, // used to tell new transaction from prior during import
mBeenTandMBilled:1, // used for time and materials billing
mBeenRecvBilled:1, // used for accounts receivable billing new TCS 6/8/00
mBeenPaid:1,
mBeenDeposited:1,
mSpareBit:1, // flexible bit TCS 6/19/01
mIsMarked:1; // for breakdown checkmarks and similar flag bits rev TCS 5/1/00
UInt8 mBoolean:1, // flexible data bit
mInstantPayment:1, // paid instantly TCS 2/9/01
mOldCreationType:3, // OLD METHOD-- how item was created TCS 2/14/01
mTransFiller:3; // room for expansion

// calculated but not stored. **** DO NOT ADD to cFileLength ****
DBid mCurrentUser; // for multi-user access TCS 11/18/99
DB_RecordViewer *mDisplayingViewer; // TCS 11/20/99
UInt8 mIsInRemoteUse:1, // will be used for multi-user
baseTransFiller:7;
UInt8 mDBTPadding; // TCS 6/25/03

enum
{
cCopyFileLength = 2*sizeof(UInt8),

cFileLength = cCopyFileLength + sizeof(UInt16)
};
};