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

Billing Records (Header)

Link to: source code | source 2 | transactions directory

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

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

class CBillingRecord : public CReceiptTransaction
{
public:

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

CBillingRecord();
virtual ~CBillingRecord() {}

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

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

virtual NeoSize GetFileLength(const CNeoFormat *aFormat) const;

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

virtual void PostNewRecord(const UInt8 creationType);
virtual void PostDeletion(const Boolean postAudit);
virtual void PostRecordActivated(const UInt8 creationType);
virtual void PostRecordCancelled(const UInt8 cancelType);

virtual void PostRecordChanging(const Boolean accountChanging,
const Boolean jobChanging);
virtual void PostRecordChanged(const CMoney &oldAmount,
const Boolean accountChanged,
const Boolean jobChanged);
virtual void PostBilling(const Boolean removeItem = false);
virtual void PostBreakdownsBilled(const Boolean removeItem = false);

static DBid FindLastBillID(const UInt8 classID, const DBid inItemID,
const UInt8 breakdownType, const DBid skipID = 0);

virtual DBid GetPaymentTerm() const { return mPaymentTerms; }
virtual DBid GetTaxID() const { return mTaxRate; }

virtual CMoney GetGrossAmount() const { return mGrossAmount; }
virtual void SetGrossAmount(const CMoney &inMoney) { mGrossAmount = inMoney; }

virtual CMoney GetContractAmount() const;
virtual Boolean HasBeenReceivableBilled() const { return !HasVoidStatus(); } // TCS 11/19/03

virtual void AddDrawBreakdownsToBill(const SProjectInfo &projectInfo,
const UInt8 entryClass);
virtual void AddTandMBreakdownsToBill(const STandMInfo &projectInfo);
virtual void AddChangeOrderBreakdownsToBill(const SAllowanceInfo &projectInfo, const DBClass breakdownClassID);
//virtual void AddAllowanceBreakdownsToBill(const SAllowanceInfo &projectInfo);
virtual void AddSaleBreakdownsToBill(const SCustomerInfo &customerInfo);
void AddRentBreakdownsToBill(const SLeaseInfo &leaseInfo); // BD 3/19/02

virtual void FillFromPriorBillBreakdown(SProjectInfo &projectInfo,
const DBid entryClassID);

//virtual Boolean IsValidBreakdown(const UInt8 breakdownType);

virtual void FinishNonViewerCreate();

virtual Boolean HasRecordLock() const;
virtual Boolean HasLockedStatus() const;
virtual Boolean CanBeDeleted(const Boolean giveMessage = true) const;

virtual Boolean HasLaterBill() const;
virtual Boolean IsOriginalSale() const { return mMainAccountClass == id_ProjectAccount; } // TCS 10/19/00
virtual DBid GetDefaultRevenueAccount() const { return account_ProjectRevenue; }

virtual void FinishBreakdownUpdate(CBreakdownEntry *breakdown, CBreakdownTable *table);

virtual CMoney GetFinanceCharge(const CDate /*compareDate*/) const { return mFinanceCharge; }
//virtual CMoney GetUnpaidBalance() const { return mUnpaidBalance; }
virtual CMoney GetRetainageAmount() const { return mRetainageAmount; }
virtual void SetRetainageAmount(const CMoney &inAmount) { mRetainageAmount = inAmount; }

virtual CMoney GetAmountCurrent() { return mAmount - GetAmountPaid(); }

virtual CMoney GetSalesTaxAmount() const { return mTaxAmount; } // rev TCS 5/2/00
virtual void SetSalesTaxAmount(const CMoney &inMoney) { mTaxAmount = inMoney; }
virtual CMoney GetSalesTaxPercent() const; // TCS 1/22/03

virtual CDate GetBillingDate() const { return mBillingDate; }

virtual void SetFinanceCharge(const CMoney &inAmount) { mFinanceCharge = inAmount; }

virtual UInt8 GetStarterStatus() const;
virtual UInt8 GetConditions() const { return mConditions; } // TCS 9/7/00
virtual UInt8 GetStatus() const { return mStatus; } // TCS 4/23/01

virtual UInt8 GetProjectType() const;
virtual UInt8 GetPhaseClassID() const;

virtual void SetJustPrinted();
virtual void SetPaidInFull(const Boolean isPaid = true);

virtual Boolean IsBilled() const { return true; } // TCS 3/7/02
virtual Boolean IsPrepaid() const { return false; }

virtual CMoney GetValueCompleted() const { return mValueCompleted; }
virtual void SetValueCompleted(const CMoney &inAmount) { mValueCompleted = inAmount; }
virtual CMoney GetPercentCompleted() const { return mPercentCompleted; }
virtual void SetPercentCompleted(const CMoney &inAmount) { mPercentCompleted = inAmount; }
virtual DBid GetEstimateID() const;
virtual DBid GetNextBill() { return mNextBill; }
virtual void SetNextBill(const DBid inValue) { mNextBill = inValue; }

virtual CMoney GetPenaltyDue(const CDate compareDate) const;
virtual DBClass GetPaymentTermClass() const;

virtual DBid GetTransactionRef() const { return mTransactionRef; } // TCS 2/20/01
virtual void SetTransactionRef(const DBid inID) { mTransactionRef = inID; }

virtual Boolean CopySelectedBreakdowns(CBreakdownTransaction *source);

virtual void HandlePaymentReceived(const CMoney &inAmount, const UInt8 sourceClass,
const DBid sourceID, const UInt8 transactionType,
const Boolean removeItem = false,
const Boolean fromDeposit = false,
const Boolean fromBillRecord = false);
virtual void HandleDeposit(const CMoney &amount, const UInt8 sourceClass,
const DBid sourceID, const Boolean removeItem = false,
const Boolean fromBillRecord = false);

virtual void HandleSalePaid(const CMoney amount, const Boolean removeItem = false);
virtual void HandleSaleDeposited(const CMoney amount, const Boolean removeItem = false);

virtual void HandleDateChanged();

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

virtual void SetEndSafetyTag() { mEndSafetyTag = tag_endsafetytag; }

protected:
// COPIED DATA
DBid mPaymentTerms,
mTaxRate,
mMessage,
mTransactionRef; // TCS 11/16/99 Should not be copied- we zap it in CopyFrom

CDate mBillingDate;

CMoney mGrossAmount,
mFinanceCharge,
mRetainageAmount,
mTaxAmount; // TCS removed mUnpaidBalance 11/1/00

UInt8 mStatus,
mConditions; // used for transaction class

// CALCULATED DATA
DBid mUnusedLong1,
mNextBill; // used to check deletion status

CMoney mPercentCompleted,
mValueCompleted;

TagType mEndSafetyTag; // TCS 9/8/02

//CProjectBreakdownEntry *CreateProjectBreakdownEntry(const UInt8 entryClass);

void UpdateProjectInfo(const CMoney &valueCompleted, const CMoney &percentCompleted,
const CMoney &balance);

enum
{
cCopyFileLength = 4*sizeof(DBid) +
sizeof(CDate) +
4*sizeof(CMoney) +
2*sizeof(UInt8),

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