Link to: source code | source
2 | source 3 | unit
cost directory
Copyright Turtle Creek Software 1996-2006. All Rights Reserved.
This class manages category systems in the Goldenseal accounting software,
estimating software, unit
cost software, job
costing software
and construction estimating software.
class CCategorySystem : public DB_DescribedPersistent
{
public:
enum
{ // category column identifiers
col_cat = 1,
col_costclass,
col_catcode,
col_catcomprate,
col_cattaxrate,
// subcategory column identifiers
col_subcat = 1,
col_subcatcomprate,
col_subcattaxrate
};
static CLASS_DESC *sDescriptor;
static DB_PersistentObject *MakeNew() { return TCS_NEW CCategorySystem; }
CCategorySystem();
virtual ~CCategorySystem();
static DBid GetDefaultCatSystem();
static DBid GetCurrentCatSystem();
static void SetCurrentCatSystem (const DBid inSystem);
static void InitializeCatInfo(SCatInfo &catInfo);
static Boolean FillDefaultCostArray(TJobCostCategoryArray &costArray,
const Boolean includeAllCats = false);
static Boolean FillDefaultProgressArray(TJobCostProgressArray &costArray);
static void InitializeJobCostReportInfo(SJobCostReportInfo &costInfo);
static void InitializeJobCostCategoryInfo(SJobCostCategoryInfo &costInfo);
static void InitializeJobCostCompareInfo(SJobCostCompareInfo &costInfo);
//static void InitializeJobCostClassInfo(SJobCostClassInfo &costInfo);
static void FillJobCostCompareArray(TJobCostCompareArray &array, const DBid reportID);
static Boolean FillAllCategoryArray(TJobCostReportArray &costArray,
const Boolean includeUnallocated = true);
static void FillDefaultCategoryRowArray(TReportRowArray *rowInfoArray,
const Boolean includeItems, TJobCostCompareArray &compareArray);
static void FillDefaultCatSubcatArray(TTwoLevelArray *twoLevelArray);
static void FillDefaultCatItemArray(TReportGroupArray *catArray);
virtual DBid GetDBClassID(void) const { return id_CategorySystem; }
virtual void CopyFrom(DB_PersistentObject *source, const UInt8 copyFlags = 0);
virtual void CopyArrayFrom(DB_PersistentObject *source);
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);
TCatArray GetCategoryArray() { return mCategories; }
SInt32 GetCategoryCount() const { return mCategories.GetCount(); }
static void FillCategoryNameArray(TNameIDArray &array, const DBid catSystemID);
/*static void FillSubcatNameArray(TNameIDArray &array, const DBid categoryID,
const DBid catSystemID);*/
void FillCatNameArray(TNameIDArray &array) const;
SInt32 GetCatCount() const { return mCategories.GetCount(); }
SInt32 GetSubcatCount(const SInt32 catIndex);
Boolean GetCatInfo(SInt32 catIndex, SCatInfo *outInfo) const;
Boolean GetCatInfoFromRef(DBid ref, SCatInfo *outInfo) const;
Boolean GetSubcatInfo(DBid catIndex, SInt32 subcatIndex,
SSubcatInfo *outInfo) const;
Boolean GetSubcatInfoFromRef(DBid catRef, DBid subcatRef,
SSubcatInfo *info) const;
void SetCatInfo(SInt32 catIndex, const SCatInfo &catInfo,
Boolean ignoreSubs = true);
void SetSubcatInfo(SInt32 catIndex, SInt32 subcatIndex,
const SSubcatInfo &subcatInfo);
TObjectIDArray GetCategoriesInClass(const DBid catClassID) const;
TSubCatArray *GetSubcatArray(const SInt32 catIndex) const;
TSubCatArray *GetSubcatArrayFromRef(DBid catRef) const;
void AddCategory();
DBid AddSubcatToCatByRef(DBid catID, DBid subcatID = 0,
CMoney taxRate = 0, CMoney compRate = 0);
DBid AddSubcatToCatByIndex(const SInt32 catIndex,DBid subcatID = 0,
CMoney taxRate = 0, CMoney compRate = 0);
void DeleteNamelessCats();
void DeleteAllCats();
virtual CTextString ExportCatCString(const SInt32 catIndex,
const TableIndexT col);
virtual CTextString ExportSubcatCString(const SInt32 catIndex,
const SInt32 subcatIndex,
const TableIndexT col);
virtual Boolean ImportCatCString(const SInt32 catIndex,
const TableIndexT col,
const CTextString &inString);
virtual Boolean ImportSubcatCString(const SInt32 catIndex,
const SInt32 subcatIndex,
const TableIndexT col,
const CTextString &inString);
Boolean NeedsSubcats() { return mRequireSubcats; }
Boolean TaxAsPercent() { return mTaxAsPercent; }
void SetTaxAsPercent(const Boolean inValue) { mTaxAsPercent = inValue; }
Boolean CompAsPercent() { return mCompAsPercent; }
void SetCompAsPercent(const Boolean inValue) { mCompAsPercent = inValue; }
Boolean FillCostReportArray(TJobCostReportArray &costArray) const;
Boolean FillCostCategoryArray(TJobCostCategoryArray &costArray) const;
Boolean FillCostSubcategoryArray(TJobCostCategoryArray &costArray, const DBid matchCat) const;
Boolean FillProgressArray(TJobCostProgressArray &costArray) const;
virtual void FillCategoryRowArray(TReportRowArray *rowInfoArray, const DBid reportID,
const Boolean includeItems, TJobCostCompareArray &compareArray) const;
virtual void FillCategoryRowArray(TReportRowArray *rowInfoArray,
const Boolean includeItems, TJobCostCompareArray &compareArray) const;
virtual void FillSubcategoryRowArray(TReportRowArray *rowInfoArray,
const Boolean includeItems, TJobCostCompareArray &compareArray) const;
virtual void FillCategoryClassRowArray(TReportRowArray *rowInfoArray,
const Boolean includeItems, TJobCostCompareArray &compareArray) const;
virtual void FillCatSubcatArray(const DBid reportID, TTwoLevelArray *twoLevelArray,
const Boolean hideSoftCosts, CMoney &softCostAmount,
CMoney &hardCostAmount) const;
virtual void FillCatItemArray(const DBid reportID, TReportGroupArray *catArray) const;
virtual void PostNewRecord(const UInt8 creationType);
virtual void PostDeletion(const Boolean postAudit = true);
virtual void PostImportNew(const Boolean fromPostAction = false);
virtual void PostRecordChanging(const Boolean accountChanging,
const Boolean jobChanging);
virtual void PostRecordChanged(const CMoney &oldAmount,
const Boolean accountChanged,
const Boolean jobChanged);
void AdjustCategoryArrays(const Boolean removeIt = false);
void AdjustCategoryArray(const DBid catID, const Boolean removeIt);
Boolean IncludesCategory(const DBid catID, const Boolean subcatsAlso = true);
virtual Boolean IncludeInStarterFile() const { return mIncludeInStarterFile; } // TCS 12/5/02
CMoney GetDeductionAmount(const CMoney &baseAmount, const CMoney &hours,
const DBid category, const DBid subcategory,
CMoney &rate, Boolean &isPercent,
const Boolean isComp);
CTextString GetCategoryCode(const DBid category) const;
DBid GetCategoryClass(const DBid category) const;
virtual Boolean HasSubcategories() const;
void HandleCategoryMove(const SMoveInfo moveInfo);
void HandleCategoryInsertion(const TableIndexT row);
void HandleCategoryDeleted(const TableIndexT row);
void FillCategoryReport(CTextOutputStream &stream);
virtual void FillDataReport(CTCS_Table *table, CNeoStream *stream) const;
virtual void SetEndSafetyTag() { mEndSafetyTag = tag_endsafetytag; }
protected:
// array member
TCatArray mCategories;
// copied members
CMoney mDefaultCompRate,
mDefaultTaxRate;
// *** NEVER insert members before this bitfield!!!
UInt8 mTaxAsPercent:1,
mCompAsPercent:1,
mRequireSubcats:1,
mIncludeInStarterFile:1, // TCS 12/5/02
filler:4;
UInt8 mPadding; // TCS 3/27/02
// calculated members
TagType mEndSafetyTag; // TCS 9/8/02
enum
{
cCopyFileLength = 2*sizeof(CMoney) +
2*sizeof(UInt8),
cFileLength = cCopyFileLength +
sizeof(TagType)
};
static DBid sCurrentCatSystem;
DBid AddSubcatToCat(const SCatInfo &catInfo, DBid subcatID = 0,
CMoney taxRate = 0, CMoney compRate = 0);
}; |