/// <summary> /// Sets up the value cell(s) for a specific data label /// /// </summary> /// <returns>void</returns> private void SetupGridValueCell(Int32 ARowIndex, PDataLabelRow ADataLabelRow) { Control cellControl; System.Windows.Forms.TextBox TextBoxEditor; TtxtPetraDate DateEditor; System.Windows.Forms.CheckBox CheckBoxEditor; TTxtNumericTextBox TextBoxNumericEditor; TTxtCurrencyTextBox TextBoxCurrencyEditor; TCmbAutoPopulated LookupValueEditor; TtxtAutoPopulatedButtonLabel PartnerKeyEditor; SourceGrid.Cells.Views.Cell ValueModel; SourceGrid.Cells.Views.Cell SuffixModel; PDataLabelValuePartnerRow DataLabelValuePartnerRow; PDataLabelValueApplicationRow DataLabelValueApplicationRow; // prepare model for the value cells ValueModel = new SourceGrid.Cells.Views.Cell(); ValueModel.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft; ValueModel.Font = new Font(FLocalDataLabelValuesGrid.Font.FontFamily.Name, FLocalDataLabelValuesGrid.Font.Size, FontStyle.Bold); // prepare model for suffix cells (e.g. for currency) SuffixModel = new SourceGrid.Cells.Views.Cell(); SuffixModel.BackColor = FLocalDataLabelValuesGrid.BackColor; SuffixModel.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft; // In this case the data value rows will only be created once a value is entered GetOrCreateDataLabelValueRow(false, ADataLabelRow, out DataLabelValuePartnerRow, out DataLabelValueApplicationRow); // initialize cell control cellControl = null; // Create field, according to specified data type // Create character field if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_CHAR) { TextBoxEditor = new System.Windows.Forms.TextBox(); cellControl = TextBoxEditor; if (DataLabelValuePartnerRow != null) { TextBoxEditor.Text = DataLabelValuePartnerRow.ValueChar; } else if (DataLabelValueApplicationRow != null) { TextBoxEditor.Text = DataLabelValueApplicationRow.ValueChar; } else { // Default value if no Label data exists for the Partner TextBoxEditor.Text = ""; } // enable save button in editor when cell contents have changed TextBoxEditor.TextChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)TextBoxEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = TextBoxEditor; } // Create float field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_FLOAT) { TextBoxNumericEditor = new TTxtNumericTextBox(); if (ADataLabelRow.NumDecimalPlaces == 0) { TextBoxNumericEditor.ControlMode = TTxtNumericTextBox.TNumericTextBoxMode.LongInteger; TextBoxNumericEditor.MaxLength = 14; } else { TextBoxNumericEditor.ControlMode = TTxtNumericTextBox.TNumericTextBoxMode.Decimal; TextBoxNumericEditor.DecimalPlaces = ADataLabelRow.NumDecimalPlaces; // limit text length. 14 for number of digits, 5 for decimal and thousands separators TextBoxNumericEditor.MaxLength = 14 + 5 + ADataLabelRow.NumDecimalPlaces; } TextBoxNumericEditor.NullValueAllowed = true; cellControl = TextBoxNumericEditor; if (ADataLabelRow.NumDecimalPlaces == 0) { if (DataLabelValuePartnerRow != null) { TextBoxNumericEditor.NumberValueLongInt = (long)DataLabelValuePartnerRow.ValueNum; } else if (DataLabelValueApplicationRow != null) { TextBoxNumericEditor.NumberValueLongInt = (long)DataLabelValueApplicationRow.ValueNum; } else { // Default value if no Label data exists for the Partner TextBoxNumericEditor.NumberValueLongInt = null; } } else { if (DataLabelValuePartnerRow != null) { TextBoxNumericEditor.NumberValueDecimal = DataLabelValuePartnerRow.ValueNum; } else if (DataLabelValueApplicationRow != null) { TextBoxNumericEditor.NumberValueDecimal = DataLabelValueApplicationRow.ValueNum; } else { // Default value if no Label data exists for the Partner TextBoxNumericEditor.NumberValueDecimal = null; } } // enable save button in editor when cell contents have changed TextBoxNumericEditor.TextChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)TextBoxNumericEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = TextBoxNumericEditor; } // Create data field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_DATE) { DateEditor = new TtxtPetraDate(); DateEditor.Date = null; cellControl = DateEditor; if (DataLabelValuePartnerRow != null) { if (!DataLabelValuePartnerRow.IsValueDateNull()) { DateEditor.Date = DataLabelValuePartnerRow.ValueDate; } } else if (DataLabelValueApplicationRow != null) { if (!DataLabelValueApplicationRow.IsValueDateNull()) { DateEditor.Date = DataLabelValueApplicationRow.ValueDate; } } // enable save button in editor when cell contents have changed DateEditor.DateChanged += new TPetraDateChangedEventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)DateEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = DateEditor; } // Create integer field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_INTEGER) { TextBoxNumericEditor = new TTxtNumericTextBox(); TextBoxNumericEditor.ControlMode = TTxtNumericTextBox.TNumericTextBoxMode.Integer; TextBoxNumericEditor.NullValueAllowed = true; cellControl = TextBoxNumericEditor; if (DataLabelValuePartnerRow != null) { TextBoxNumericEditor.NumberValueInt = DataLabelValuePartnerRow.ValueInt; } else if (DataLabelValueApplicationRow != null) { TextBoxNumericEditor.NumberValueInt = DataLabelValueApplicationRow.ValueInt; } else { // Default value if no Label data exists for the Partner TextBoxNumericEditor.NumberValueInt = null; } // enable save button in editor when cell contents have changed TextBoxNumericEditor.TextChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)TextBoxNumericEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = TextBoxNumericEditor; } // Create currency field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_CURRENCY) { TextBoxCurrencyEditor = new TTxtCurrencyTextBox(); TextBoxCurrencyEditor.DecimalPlaces = 2; TextBoxCurrencyEditor.CurrencyCode = ADataLabelRow.CurrencyCode; TextBoxCurrencyEditor.NullValueAllowed = true; cellControl = TextBoxCurrencyEditor; if (DataLabelValuePartnerRow != null) { TextBoxCurrencyEditor.NumberValueDecimal = DataLabelValuePartnerRow.ValueCurrency; } else if (DataLabelValueApplicationRow != null) { TextBoxCurrencyEditor.NumberValueDecimal = DataLabelValueApplicationRow.ValueCurrency; } else { // Default value if no Label data exists for the Partner TextBoxCurrencyEditor.NumberValueDecimal = null; } // enable save button in editor when cell contents have changed TextBoxCurrencyEditor.TextChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)TextBoxCurrencyEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = TextBoxCurrencyEditor; } // Create boolean field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_BOOLEAN) { CheckBoxEditor = new System.Windows.Forms.CheckBox(); cellControl = CheckBoxEditor; if (DataLabelValuePartnerRow != null) { CheckBoxEditor.Checked = DataLabelValuePartnerRow.ValueBool; } else if (DataLabelValueApplicationRow != null) { CheckBoxEditor.Checked = DataLabelValueApplicationRow.ValueBool; } else { // Default value if no Label data exists for the Partner CheckBoxEditor.Checked = false; } // enable save button in editor when cell contents have changed CheckBoxEditor.CheckedChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)CheckBoxEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = CheckBoxEditor; } // Create partner key field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_PARTNERKEY) { PartnerKeyEditor = new TtxtAutoPopulatedButtonLabel(); PartnerKeyEditor.ASpecialSetting = true; PartnerKeyEditor.ButtonText = ADataLabelRow.Text + ':'; PartnerKeyEditor.ButtonTextAlign = System.Drawing.ContentAlignment.MiddleRight; PartnerKeyEditor.ListTable = TtxtAutoPopulatedButtonLabel.TListTableEnum.PartnerKey; PartnerKeyEditor.TabStop = false; cellControl = PartnerKeyEditor; // AutomaticallyUpdateDataSource: very rare, but needed here PartnerKeyEditor.AutomaticallyUpdateDataSource = true; if (DataLabelValuePartnerRow != null) { PartnerKeyEditor.Text = StringHelper.PartnerKeyToStr(DataLabelValuePartnerRow.ValuePartnerKey); } else if (DataLabelValueApplicationRow != null) { PartnerKeyEditor.Text = StringHelper.PartnerKeyToStr(DataLabelValueApplicationRow.ValuePartnerKey); } else { // Default value if no Label data exists for the Partner PartnerKeyEditor.Text = StringHelper.PartnerKeyToStr(0); } // display partner name linked to partner key PartnerKeyEditor.ResetLabelText(); // enable save button in editor when cell contents have changed PartnerKeyEditor.ValueChanged += new TDelegatePartnerChanged(this.PartnerKeyControlValueHasChanged); PartnerKeyEditor.TextChanged += new System.EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 0] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue(PartnerKeyEditor, new Position(ARowIndex, 0))); FLocalDataLabelValuesGrid[ARowIndex, 0].Tag = PartnerKeyEditor; FLocalDataLabelValuesGrid[ARowIndex, 0].ColumnSpan = 3; } // Create lookup field else if (ADataLabelRow.DataType == MCommonConstants.OFFICESPECIFIC_DATATYPE_LOOKUP) { // Get the instance of the combobox (created in the actual user interface class) LookupValueEditor = new TCmbAutoPopulated(); LookupValueEditor.Filter = PDataLabelLookupTable.GetCategoryCodeDBName() + " = '" + ADataLabelRow.LookupCategoryCode + "'"; LookupValueEditor.ListTable = TCmbAutoPopulated.TListTableEnum.DataLabelLookupList; LookupValueEditor.InitialiseUserControl(); cellControl = LookupValueEditor; if (DataLabelValuePartnerRow != null) { LookupValueEditor.SetSelectedString(DataLabelValuePartnerRow.ValueLookup); } else if (DataLabelValueApplicationRow != null) { LookupValueEditor.SetSelectedString(DataLabelValueApplicationRow.ValueLookup); } else { // Default value if no Label data exists for the Partner LookupValueEditor.Text = ""; } // enable save button in editor when cell contents have changed LookupValueEditor.SelectedValueChanged += new EventHandler(this.ControlValueHasChanged); LookupValueEditor.TextChanged += new EventHandler(this.ControlValueHasChanged); FLocalDataLabelValuesGrid[ARowIndex, 1] = new SourceGrid.Cells.Cell(); FLocalDataLabelValuesGrid.LinkedControls.Add(new LinkedControlValue((Control)LookupValueEditor, new Position(ARowIndex, 1))); FLocalDataLabelValuesGrid[ARowIndex, 1].Tag = LookupValueEditor; FLocalDataLabelValuesGrid[ARowIndex, 1].ColumnSpan = 2; } // perform actions that need to be done for each control if (cellControl != null) { // remember the added control to get the value back lateron FGridRowInfo.SetControl(ARowIndex, cellControl); // handle focus change when field is entered cellControl.Enter += new EventHandler(this.UpdateGridFocusFromExternalControl); // set help text for control PetraUtilsObject.SetStatusBarText(cellControl, ADataLabelRow.Description); } // check if value is editable if (!ADataLabelRow.Editable) { FLocalDataLabelValuesGrid[ARowIndex, 1].Editor.EnableEdit = false; } }
/// <summary> /// ApplyMotivationDetailCodeFilter /// </summary> private static void ApplyMotivationDetailCodeFilter(GiftBatchTDSAGiftDetailRow ACurrentDetailRow, GiftBatchTDS AMainDS, Int32 ALedgerNumber, TFrmPetraEditUtils APetraUtilsObject, TCmbAutoPopulated ACmbKeyMinistries, ref TCmbAutoPopulated ACmbMotivationDetailCode, TtxtAutoPopulatedButtonLabel ATxtDetailRecipientKey, Int64 ARecipientKey, TtxtAutoPopulatedButtonLabel AtxtDetailRecipientLedgerNumber, TextBox ATxtDetailCostCentreCode, TextBox ATxtDetailAccountCode, TextBox ATxtDetailRecipientKeyMinistry, CheckBox AChkDetailTaxDeductible, TextBox ATxtDeductibleAccount, string AMotivationGroup, ref string AMotivationDetail, ref bool AMotivationDetailChangedFlag, bool AActiveOnly, bool ARecipientKeyChangingFlag, bool ACreatingNewGiftFlag, bool AInEditModeFlag, bool ABatchUnpostedFlag, bool ATaxDeductiblePercentageEnabledFlag, out bool ADoTaxUpdate) { //FMotivationbDetail will change by next process string motivationDetail = AMotivationDetail; string AutoPopComment; TFinanceControls.ChangeFilterMotivationDetailList(ref ACmbMotivationDetailCode, AMotivationGroup); AMotivationDetail = motivationDetail; if (AMotivationDetail.Length > 0) { ACmbMotivationDetailCode.SetSelectedString(AMotivationDetail); ACmbMotivationDetailCode.Text = AMotivationDetail; ADoTaxUpdate = false; } else if (ACmbMotivationDetailCode.Count > 0) { ACmbMotivationDetailCode.SelectedIndex = 0; //Force refresh of label OnMotivationDetailChanged(ACurrentDetailRow, AMainDS, ALedgerNumber, APetraUtilsObject, ACmbKeyMinistries, ACmbMotivationDetailCode, ATxtDetailRecipientKey, ARecipientKey, AtxtDetailRecipientLedgerNumber, ATxtDetailCostCentreCode, ATxtDetailAccountCode, ATxtDetailRecipientKeyMinistry, AChkDetailTaxDeductible, ATxtDeductibleAccount, AMotivationGroup, ref AMotivationDetail, ref AMotivationDetailChangedFlag, ARecipientKeyChangingFlag, ACreatingNewGiftFlag, AInEditModeFlag, ABatchUnpostedFlag, ATaxDeductiblePercentageEnabledFlag, false, out ADoTaxUpdate, out AutoPopComment); } else { ACmbMotivationDetailCode.SelectedIndex = -1; //Force refresh of label OnMotivationDetailChanged(ACurrentDetailRow, AMainDS, ALedgerNumber, APetraUtilsObject, ACmbKeyMinistries, ACmbMotivationDetailCode, ATxtDetailRecipientKey, ARecipientKey, AtxtDetailRecipientLedgerNumber, ATxtDetailCostCentreCode, ATxtDetailAccountCode, ATxtDetailRecipientKeyMinistry, AChkDetailTaxDeductible, ATxtDeductibleAccount, AMotivationGroup, ref AMotivationDetail, ref AMotivationDetailChangedFlag, ARecipientKeyChangingFlag, ACreatingNewGiftFlag, AInEditModeFlag, ABatchUnpostedFlag, ATaxDeductiblePercentageEnabledFlag, false, out ADoTaxUpdate, out AutoPopComment); } RetrieveMotivationDetailAccountCode(AMainDS, ALedgerNumber, ATxtDetailAccountCode, ATxtDeductibleAccount, AMotivationGroup, AMotivationDetail, ATaxDeductiblePercentageEnabledFlag); if ((ATxtDetailRecipientKey.Text == string.Empty) || (Convert.ToInt64(ATxtDetailRecipientKey.Text) == 0)) { ATxtDetailRecipientKey.Text = String.Format("{0:0000000000}", 0); RetrieveMotivationDetailCostCentreCode(AMainDS, ALedgerNumber, ATxtDetailCostCentreCode, AMotivationGroup, AMotivationDetail); } }
/// <summary> /// Keep the combo and textboxes together /// </summary> private static void ReconcileKeyMinistryFromTextbox(GiftBatchTDSAGiftDetailRow ACurrentDetailRow, TCmbAutoPopulated ACmbKeyMinistries, TextBox ATxtDetailRecipientKeyMinistry, bool AInEditModeFlag, bool ABatchUnpostedFlag) { if (ABatchUnpostedFlag && AInEditModeFlag) { bool isEmptyDetailRow = (ACurrentDetailRow == null); string keyMinistry = ATxtDetailRecipientKeyMinistry.Text; if (!isEmptyDetailRow && (keyMinistry.Length > 0)) { ACmbKeyMinistries.SetSelectedString(keyMinistry); } else { ACmbKeyMinistries.SelectedIndex = -1; } } }
/// <summary> /// ResetMotivationDetailCodeFilter /// </summary> private static void ResetMotivationDetailCodeFilter(TCmbAutoPopulated ACmbMotivationDetailCode, ref string AMotivationDetail, bool AActiveOnly) { if ((ACmbMotivationDetailCode.Count == 0) && (ACmbMotivationDetailCode.Filter != null) && (!ACmbMotivationDetailCode.Filter.Contains("1 = 2"))) { AMotivationDetail = string.Empty; ACmbMotivationDetailCode.RefreshLabel(); if (AActiveOnly) { //This is needed as the code in TFinanceControls.ChangeFilterMotivationDetailList looks for presence of the active only prefix ACmbMotivationDetailCode.Filter = AMotivationDetailTable.GetMotivationStatusDBName() + " = true And 1 = 2"; } else { ACmbMotivationDetailCode.Filter = "1 = 2"; } return; } if (ACmbMotivationDetailCode.Count > 0) { AMotivationDetail = ACmbMotivationDetailCode.GetSelectedString(); } if (AActiveOnly) { ACmbMotivationDetailCode.Filter = AMotivationDetailTable.GetMotivationStatusDBName() + " = true"; } else { ACmbMotivationDetailCode.Filter = string.Empty; } ACmbMotivationDetailCode.SetSelectedString(AMotivationDetail); ACmbMotivationDetailCode.RefreshLabel(); }
/// <summary> /// Call when the recipient key changes /// </summary> public static void OnRecipientKeyChanged(Int64 APartnerKey, String APartnerShortName, bool AValidSelection, GiftBatchTDSAGiftDetailRow ACurrentDetailRow, GiftBatchTDS AMainDS, Int32 ALedgerNumber, TFrmPetraEditUtils APetraUtilsObject, ref TCmbAutoPopulated ACmbKeyMinistries, TCmbAutoPopulated ACmbMotivationGroupCode, TCmbAutoPopulated ACmbMotivationDetailCode, TtxtAutoPopulatedButtonLabel ATxtDetailRecipientKey, TtxtAutoPopulatedButtonLabel AtxtDetailRecipientLedgerNumber, TextBox ATxtDetailCostCentreCode, TextBox ATxtDetailAccountCode, TextBox ATxtDetailRecipientKeyMinistry, CheckBox AChkDetailTaxDeductible, TextBox ATxtDeductibleAccount, ref string AMotivationGroup, ref string AMotivationDetail, bool AShowingDetailsFlag, ref bool ARecipientKeyChangingFlag, bool AInKeyMinistryChangingFlag, bool AInEditModeFlag, bool ABatchUnpostedFlag, bool AMotivationDetailChangedFlag, bool ATaxDeductiblePercentageEnabledFlag, bool ACreatingNewGiftFlag, bool AActiveOnly, out bool ADoValidateGiftDestination, out bool ADoTaxUpdate) { ADoValidateGiftDestination = false; ADoTaxUpdate = false; if (ARecipientKeyChangingFlag || APetraUtilsObject.SuppressChangeDetection || AShowingDetailsFlag) { return; } ARecipientKeyChangingFlag = true; ATxtDetailRecipientKeyMinistry.Text = string.Empty; try { ACurrentDetailRow.RecipientKey = APartnerKey; ACurrentDetailRow.RecipientDescription = APartnerShortName; // do not want to update motivation comboboxes if recipient key is being changed due to a new gift or the motivation detail being changed if (!AMotivationDetailChangedFlag && !ACreatingNewGiftFlag && TRemote.MFinance.Gift.WebConnectors.GetMotivationGroupAndDetail(APartnerKey, ref AMotivationGroup, ref AMotivationDetail)) { if (AMotivationGroup != ACmbMotivationGroupCode.GetSelectedString()) { // note - this will also update the Motivation Detail ACmbMotivationGroupCode.SetSelectedString(AMotivationGroup); } if (AMotivationDetail != ACmbMotivationDetailCode.GetSelectedString()) { ACmbMotivationDetailCode.SetSelectedString(AMotivationDetail); } ACurrentDetailRow.MotivationGroupCode = AMotivationGroup; ACurrentDetailRow.MotivationDetailCode = AMotivationDetail; } APetraUtilsObject.SuppressChangeDetection = true; //Set RecipientLedgerNumber if (APartnerKey > 0) { ACurrentDetailRow.RecipientLedgerNumber = TRemote.MFinance.Gift.WebConnectors.GetRecipientFundNumber(APartnerKey, ACurrentDetailRow.DateEntered); } else { ACurrentDetailRow.RecipientLedgerNumber = 0; } if (!AInKeyMinistryChangingFlag) { GetRecipientData(ACurrentDetailRow, APartnerKey, ref ACmbKeyMinistries, ATxtDetailRecipientKey, ref AtxtDetailRecipientLedgerNumber, AMotivationDetailChangedFlag); ADoValidateGiftDestination = true; } if (APartnerKey > 0) { RetrieveRecipientCostCentreCode(ACurrentDetailRow, ATxtDetailCostCentreCode); } else { UpdateRecipientKeyText(APartnerKey, ACurrentDetailRow, AMotivationGroup, AMotivationDetail); RetrieveMotivationDetailCostCentreCode(AMainDS, ALedgerNumber, ATxtDetailCostCentreCode, AMotivationGroup, AMotivationDetail); } if (ATaxDeductiblePercentageEnabledFlag) { ADoTaxUpdate = true; } } finally { ARecipientKeyChangingFlag = false; ReconcileKeyMinistryFromCombo(ACurrentDetailRow, ACmbKeyMinistries, ATxtDetailRecipientKeyMinistry, AInEditModeFlag, ABatchUnpostedFlag); APetraUtilsObject.SuppressChangeDetection = false; } }