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

Receipt Transactions (Header)

Link to: source code | transactions directory

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

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

class CReceiptTransaction : public CBreakdownTransaction
{
public:

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

CReceiptTransaction();
virtual ~CReceiptTransaction() {}

static UInt8 GetPaymentType(const DBid paymentID);
static SInt32 GetPaymentDetailsClass(const DBid paymentID);

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

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

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 PostRevenueAccount(const Boolean removeItem = false);

virtual DBid GetDefaultRevenueAccount() const { return 0; }
virtual void PostSalesTaxDue(const Boolean removeItem = false);

virtual CMoney FetchDiscountOrPenalty(const CDate theDate) const;
virtual Boolean GetAllDueDates(CDate *billingDate, CDate *discountDate,
CDate *dueDate);

virtual SInt32 GetDaysOverdue(CDate compareDate = CDate::Today()) const;

//virtual Boolean CanBeBilled() const;
virtual Boolean IsBilled() const;
virtual Boolean IsPrepaid() const;
virtual Boolean IsOriginalSale() const { return false; } // TCS 10/19/00

virtual void HandlePaymentMade(const CMoney &inAmount, const UInt8 sourceClass,
const DBid sourceID, const UInt8 transactionType,
const Boolean removeItem = false);
virtual void HandleTaxesPaid(const DBClass sourceClass, const DBid sourceID,
const Boolean removeItem = false);

virtual CDate GetDatePaid() const;
virtual void SetBillingDate(const CDate /*inDate*/) {}
virtual CDate GetDueDate() const;
virtual DBid GetPaymentTerm() const { return 0; }
virtual DBClass GetPaymentTermClass() const { return 0; }
virtual CMoney GetAccountingAmount(const Boolean removeIt, const UInt8 type) const;
virtual CMoney GetReceivablesAmount(const TagType tag, const CDate reportDate) const;
virtual CMoney GetReceivablesAmount() const { return GetAmountUnpaid(); }

virtual CMoney GetUnpaidBalance() const;
virtual CMoney GetPastDueBalance(const CDate cutoffDate) const;

virtual CMoney GetCreditAmount() const;
virtual CMoney GetIncomeAmount() const;

// note that HasPaidStatus refers to the status field value,
// while HasBeenPaid refers to the amount. They should match.
virtual Boolean HasPaidStatus() const { return GetStatus() == status_Paid || GetStatus() == status_Deposited; }
virtual Boolean HasUnpaidStatus() const { return !HasPaidStatus() && !HasVoidStatus(); } // rev TCS 3/8/00
virtual Boolean HasBeenPaid() const { return !GetAmountDue().IsPositive(); }
//virtual Boolean HasOverdueStatus() const;

virtual Boolean GetCommishPaid() const { return mCommishPaid; }
virtual void SetCommishPaid(const Boolean inValue = true) { mCommishPaid = inValue; }

/*virtual Boolean IsMixedPayMethods() const { return mMixedPayMethods; }
virtual void SetMixedPayMethods(const Boolean inValue = true) { mMixedPayMethods = inValue; }*/

/*virtual Boolean IsPartCredit() const { return mPartCredit; }
virtual void SetPartCredit(const Boolean inValue = true) { mPartCredit = inValue; }*/

virtual Boolean IsJobCosted() const { return mJobCosted; }
virtual void SetJobCosted(const Boolean inValue = true) { mJobCosted = inValue; }

virtual void SetPaidInFull(const Boolean isPaid = true);

virtual void SetAmountPaid(const CMoney &inAmount) { mAmountPaid = inAmount; }

virtual CTextString GetCustomerName() const;
virtual CTextString GetAccountNumber() const;

virtual Boolean HasPaymentReceipt() const;
virtual Boolean HasBeenDeposited() const; // TCS 4/5/00 rev 9/18/01

/*virtual Boolean GetPaymentReceived() const { return mPaymentReceived; }
virtual void SetPaymentReceived(const Boolean inValue = true) { mPaymentReceived = inValue; } */

virtual UInt8 GetUtilityAccountType(const TagType /*tag*/) const { return virtual_accruedrevenue; } // TCS 9/4/99

virtual CMoney GetAmountPaid() const { return mAmountPaid; }
virtual CMoney GetAmountDeposited() const { return mAmountDeposited; }
virtual CMoney GetAmountDue() const { return mAmount - GetAmountPaid() - mAdjustmentAmount; }
virtual CMoney GetAmountUnpaid() const { return GetAmountDue(); }
virtual CMoney GetAmountPending() const { return GetAmountDue(); }
virtual CMoney GetAmountOverdue(const CDate compareDate) const;
virtual CMoney GetAmountVeryOverdue(const CDate compareDate) const;
virtual CMoney GetPenaltyDue(const CDate /*compareDate*/) const { return 0; }

virtual CMoney GetAdjustedAmount() const { return mAmount + mAdjustmentAmount; } // TCS 11/21/01

virtual CMoney GetAdjustmentAmount() const { return mAdjustmentAmount; }
virtual void SetAdjustmentAmount(const CMoney &inAmount) { mAdjustmentAmount = inAmount; }
virtual void AddAdjustmentAmount(const CMoney &inAmount) { mAdjustmentAmount += inAmount; } // TCS 10/19/01

virtual DBid GetRevenueAccount() const { return mRevenueAccount; }
virtual void SetRevenueAccount(const DBid inID) { mRevenueAccount = inID; }

virtual CTextString GetBillingAddress() const;

virtual DBid GetTaxClass() const { return id_JobSalesTax; }
virtual DBid GetTaxID() const { return 0; }
virtual CMoney GetSalesTaxAmount() const { return 0; }
virtual DBid GetPaymentMethod() const { return mPaymentMethod; }
virtual void SetPaymentMethod(const UInt8 inMethod) { mPaymentMethod = inMethod; } // the payment method object id
virtual UInt8 GetPaymentType() const { return GetPaymentType(mPaymentMethod); } // the basic type of pmt (method_cash etc)
virtual DBid GetBillPaymentMethod() const; // the payment method id used to pay a billed item

// we store the pmt method in the transaction array
virtual UInt8 GetTransDetails() const { return GetPaymentType(); } // TCS 10/20/00

virtual DBClass GetDepositTransactionClass() const;
virtual DBid GetDepositTransactionID() const;

virtual Boolean IsValidJobCost(const UInt8 costType) const // TCS 5/8/01
{ return (costType == 0 || costType == costtype_income); }

virtual void AdjustDepositedAmount(const CMoney &inAmount) { mAmountDeposited += inAmount; }

virtual Boolean FillJobCostCatInfo(SJobCostCategoryInfo &costInfo,
const CMoney &amount, const DBClass transactionClass,
const UInt8 costType);
virtual Boolean FetchJobCostItemInfo(TJobCostItemArray &itemArray,
CTextString &catName,
const UInt8 costType);
virtual void FillCostItemInfo(TJobCostItemArray &itemArray, const UInt8 costType,
const DBid accountID) const;

virtual Boolean UsesSalePricing() const { return mSalePricing; } // 11/1/01

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

protected:

// copied members
DBid mPaymentMethod,
mRevenueAccount;

// calculated data members (TCS rev 9/1/99, 10/12/99)
CMoney mAmountPaid,
mAmountDeposited,
mAdjustmentAmount; // TCS 1/26/00

//DBid mDepositRef; // TCS removed 4/10/00. Now handled by mPaymentArray

// *** NEVER insert members before this bitfield!!!
UInt8 mCommishPaid:1,
mJobCosted:1,
//mHasPaymentReceipt:1, // TCS removed 6/6/00. Now handled by look at mPaymentArray
mSalePricing:1,
filler:5;
UInt8 mReceiptPadding; // TCS 3/27/02

enum
{
cCopyFileLength = 2*sizeof(DBid),

cFileLength = cCopyFileLength +
3*sizeof(CMoney) + // bugfix TCS 8/3/00
2*sizeof(UInt8)
};
};