Link to: header | record viewer
directory
Copyright Turtle Creek Software 1996-2006. All Rights Reserved.
Comments
CCommissionViewer
This class manages payroll commissions for the Goldenseal accounting software,
payroll software and small business
management software.
It's a viewer for employee sales commissions. Part of the setup for the Goldenseal
payroll software.
SUPERCLASS = DB_RecordViewer
Source Code
/*********************************************************************************
GetReadyToUpdateFields split TCS 4/17/00
Do prep work before updating fields
*********************************************************************************/
void CCommissionViewer::GetReadyToUpdateFields(const UInt8 creationMethod,
DB_PersistentObject *viewerObject)
{
// before we start, update the date array
CCommission *wageRate = TCS_SAFE_CAST(viewerObject, CCommission);
TCS_FailNILMsg(wageRate, TCS_GetErrString(errID_BadObject));
// update the date array, or fill it in for a new record
if (wageRate->IsInDatabase())
{
DB_ObjectTempRemover remover (wageRate); // TCS 2/6/04
if (remover.WasRemoved())
wageRate->UpdateDateArray();
}
else
wageRate->UpdateDateArray();
// the superclass handles basic field updating
THE_SUPERCLASS::GetReadyToUpdateFields(creationMethod, viewerObject);
}
/*********************************************************************************
FinishUpdatingFields split TCS 4/17/00
Finish prep work after updating fields from an object, but before displaying them
*********************************************************************************/
void CCommissionViewer::FinishUpdatingFields(const UInt8 creationMethod,
DB_PersistentObject *viewerObject)
{
// the superclass handles basic field updating
THE_SUPERCLASS::FinishUpdatingFields(creationMethod, viewerObject);
// format payday offset field
FormatOffsetField(GetPopupValue(tag_payday));
if (!IsWageSchedule())
FormatCommissionField(GetPopupValue(tag_wageunit));
// format package enablement
SetCVFieldVisible(tag_taxpackage, !GetCheckboxValue(tag_useemptaxpackage));
SetCVFieldVisible(tag_vacationpackage, !GetCheckboxValue(tag_useempvacpackage));
SetCVFieldVisible(tag_benefitpackage, !GetCheckboxValue(tag_useempbenpackage));
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************
HandleEditChanged TCS 3/5/99
an edit field has changed, act accordingly
*********************************************************************************/
void CCommissionViewer::HandleEditChanged(CTCS_EditField *editField)
{
TCS_FailNILMsg(editField, TCS_GetErrString(errID_BadField));
// now process the field
SInt32 fieldID = editField->GetPaneID();
switch (fieldID)
{
case tag_basedate:
FillNewPaydays();
break;
case tag_paydaygap:
FillNewPaydays();
break;
default:
break;
}
// pass it along
THE_SUPERCLASS::HandleEditChanged(editField);
}
/*********************************************************************************
HandleCheckboxClicked
handle a checkbox click
*********************************************************************************/
void CCommissionViewer::HandleCheckboxClicked(CTCS_StdCheckbox *checkbox)
{
TCS_FailNILMsg(checkbox, TCS_GetErrString(errID_BadCheckbox));
Boolean value = checkbox->GetValue();
switch (checkbox->GetPaneID())
{
case tag_usevariablewage:
EnableRateField(!value);
break;
case tag_useemptaxpackage:
SetCVFieldVisible(tag_taxpackage, !value);
break;
case tag_useempvacpackage:
SetCVFieldVisible(tag_vacationpackage, !value);
break;
case tag_useempbenpackage:
SetCVFieldVisible(tag_benefitpackage, !value);
break;
default:
break;
}
// be sure to pass it along
THE_SUPERCLASS::HandleCheckboxClicked(checkbox);
}
/*********************************************************************************
HandlePopupChanged
a popup menu has been clicked, act accordingly
*********************************************************************************/
void CCommissionViewer::HandlePopupChanged(CTCS_StdPopupMenu *popupMenu)
{
TCS_FailNILMsg(popupMenu, TCS_GetErrString(errID_BadPopup));
TCS_FailNILMsg(mCurrViewerObject, TCS_GetErrString(errID_BadObject));
UInt8 value = popupMenu->GetValue();
switch (popupMenu->GetPaneID())
{
case tag_payday:
FormatOffsetField(value);
FillNewPaydays();
break;
case tag_payperiod:
FillNewPaydays();
break;
case tag_wagetype:
if (IsWageSchedule())
FormatWageType(value, 0);
break;
case tag_wageunit:
{
if (IsWageSchedule())
FormatRateField(GetPopupValue(tag_wagetype), value);
else
FormatCommissionField(value);
}
break;
default:
break;
}
// be sure to pass it along
THE_SUPERCLASS::HandlePopupChanged(popupMenu);
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************
EnableRateField
enable or disable the rate field
*********************************************************************************/
void CCommissionViewer::EnableRateField(const Boolean enable)
{
CTCS_EditField *field =
TCS_SAFE_CAST(FindMemberField(tag_wagerate), CTCS_EditField);
if (field)
{ // the field exists, update its format
SetFieldEnabled(tag_wagerate, enable);
if (!enable)
{
SetFieldValue(tag_wagerate, 0);
field->SetFieldType(fieldtype_number);
}
else
{
UInt8 wageType = GetPopupValue(tag_wagetype);
UInt8 wageUnit = GetPopupValue(tag_wageunit);
FormatRateField(wageType, wageUnit);
}
}
}
/*********************************************************************************
FormatRateField
format the rate field
*********************************************************************************/
void CCommissionViewer::FormatRateField(const SInt32 wageType, const SInt32 wageUnit)
{
CTCS_EditField *field =
TCS_SAFE_CAST(FindMemberField(tag_wagerate), CTCS_EditField);
if (field)
{ // the field exists, update its format
switch (wageType)
{
case wage_bonus:
if (wageUnit == bonus_dollar)
field->SetFieldType(fieldtype_money);
else
field->SetFieldType(fieldtype_percent);
break;
case wage_commission:
if (wageUnit == commish_grosspercent || wageUnit == commish_netpercent)
field->SetFieldType(fieldtype_percent);
else
field->SetFieldType(fieldtype_money);
break;
case wage_hourly:
case wage_ownerhourly:
case wage_hourlyequity:
case wage_salary:
case wage_ownersalary:
case wage_salaryequity:
case wage_draw:
case wage_ownerdraw:
field->SetFieldType(fieldtype_money);
break;
default:
TCS_DebugAlert("Oops, an invalid wage type was used in CWageScheduleViewer::FormatOffsetField!");
break;
}
field->Refresh();
}
}
/*********************************************************************************
FormatOffsetField
enable or disable the payday offset field
*********************************************************************************/
void CCommissionViewer::FormatOffsetField(const SInt32 paydayType)
{
CTCS_EditField *field =
TCS_SAFE_CAST(FindMemberField(tag_paydaygap), CTCS_EditField);
if (field)
{ // the field exists, update its format
SetFieldVisible(tag_paydaygap, paydayType == payday_afterperiodend ||
paydayType == payday_beforeperiodend ||
paydayType == payday_afterperiodstart ||
paydayType == payday_beforeperiodstart);
}
}
/*********************************************************************************
FormatWageMenu
set the menu and value for the 'rate' popup
*********************************************************************************/
void CCommissionViewer::FormatWageMenu(const ResIDT menuType, const SInt32 initialMenuItem)
{
CTCS_StdPopupMenu *popup =
TCS_SAFE_CAST(FindMemberField(tag_wageunit), CTCS_StdPopupMenu);
if (popup)
{
popup->SetMenuResourceID(menuType, cDoesntOwnMenu);
popup->SetInitialValue(initialMenuItem); // TCS rev 8/30/01
popup->SetValue(initialMenuItem);
popup->Refresh();
}
}
#if CAN_USE_MARK
#pragma mark -
#endif
/*********************************************************************************
IsReadyToUpdateObject TCS 7/25/00
before updating, we may want to require values in certain fields. We need to
have a payment reference
*********************************************************************************/
UInt8 CCommissionViewer::IsReadyToUpdateObject(const UInt8 saveSource)
{
// first let the superclass have a try TCS 1/29/01
UInt8 saveSuccess = THE_SUPERCLASS::IsReadyToUpdateObject(saveSource);
if (saveSuccess != save_success)
return saveSuccess;
DBid objectID;
CTextString errorString = TCS_GetMsgString(msgID_MissingRequiredField);
// check the tax package
Boolean useEmployeeRate = GetFieldValue(tag_useemptaxpackage);
if (!useEmployeeRate)
{
objectID = GetFieldValue(tag_taxpackage);
if (!objectID)
{
errorString.ReplaceStdTokens(DB_ClassDescriptor::GetClassNameSingular(id_TaxPackage));
TCS_ErrorAlert(errorString);
return save_notready;
}
}
// check the benefit package
useEmployeeRate = GetFieldValue(tag_useempbenpackage);
if (!useEmployeeRate)
{
objectID = GetFieldValue(tag_benefitpackage);
if (!objectID)
{
errorString.ReplaceStdTokens(DB_ClassDescriptor::GetClassNameSingular(id_BenefitPackage));
TCS_ErrorAlert(errorString);
return save_notready;
}
}
// check the vacation package
useEmployeeRate = GetFieldValue(tag_useempvacpackage);
if (!useEmployeeRate)
{
objectID = GetFieldValue(tag_vacationpackage);
if (!objectID)
{
errorString.ReplaceStdTokens(DB_ClassDescriptor::GetClassNameSingular(id_VacationPackage));
TCS_ErrorAlert(errorString);
return save_notready;
}
}
// if we get this far, things are ok
return save_success;
}
/*********************************************************************************
FormatWageType split out TCS 8/16/00
format fields that depend on the wage type
*********************************************************************************/
void CCommissionViewer::FormatWageType(const UInt8 wageType, const UInt8 wagePeriod)
{
switch (wageType)
{
case wage_bonus:
if (wagePeriod)
FormatWageMenu(MENU_PayrollBonusTypes, wagePeriod);
else
{
FormatWageMenu(MENU_PayrollBonusTypes, bonus_dollar);
FormatRateField(wageType, bonus_dollar);
}
break;
case wage_hourly:
case wage_ownerhourly:
case wage_hourlyequity:
if (wagePeriod)
FormatWageMenu(MENU_PerHour, wagePeriod);
else
{
FormatWageMenu(MENU_PerHour, time_hour);
FormatRateField(wageType, time_hour);
}
break;
case wage_salary:
case wage_ownersalary:
case wage_salaryequity:
case wage_draw:
case wage_ownerdraw:
if (wagePeriod)
FormatWageMenu(MENU_PerDayToYear, wagePeriod);
else
{
FormatWageMenu(MENU_PerDayToYear, time_week);
FormatRateField(wageType, time_week);
}
break;
default:
TCS_DebugAlert("Oops, bad case in CCommissionViewer::FormatWageType!");
break;
}
}
/*********************************************************************************
FormatCommissionField TCS 6/5/02
format the commission amount field
*********************************************************************************/
void CCommissionViewer::FormatCommissionField(const UInt8 commishType)
{
switch (commishType)
{
case commish_dollarpersale:
case commish_dollarperunit:
SetFieldType(tag_wagerate, fieldtype_money);
SetFieldEnabled(tag_wagerate, true);
break;
case commish_grosspercent:
case commish_netpercent:
SetFieldType(tag_wagerate, fieldtype_percent);
SetFieldEnabled(tag_wagerate, true);
break;
case commish_none: // TCS 12/18/02
SetFieldType(tag_wagerate, fieldtype_percent);
SetFieldCString(tag_wagerate, CMoney::GetZeroPercentString());
SetFieldEnabled(tag_wagerate, false);
break;
default:
TCS_DebugAlert("Oops, bad case in CCommissionViewer::FormatCommissionField!");
break;
}
}
/*********************************************************************************
FillNewPaydays TCS 3/5/99
fill in a new set of paydays
*********************************************************************************/
void CCommissionViewer::FillNewPaydays()
{
UInt8 period = GetPopupValue(tag_payperiod);
if (period == time_custom)
{
// for a custom schedule, no need to do anything
}
else
{ // if another bill period type, let's fill in values
CDate baseDate = GetFieldDateValue(tag_basedate);
UInt8 payDay = GetPopupValue(tag_payday);
SInt32 payDayGap = GetFieldValue(tag_paydaygap);
TCS_FailNILMsg(mCurrViewerObject, TCS_GetErrString(errID_BadObject));
CCommission *wageRate = TCS_SAFE_CAST(mCurrViewerObject, CCommission);
TCS_FailNILMsg(wageRate, TCS_GetErrString(errID_BadObject));
CMemberTable *table =
TCS_SAFE_CAST(FindPaneByID(tag_paydaytable), CMemberTable);
TCS_FailNILMsg(table, TCS_GetErrString(errID_BadTable));
wageRate->FillDateTable(period, baseDate, payDay, payDayGap, table);
}
}
|