/// <summary>
        /// static method for opening the window from partner module
        /// </summary>
        /// <param name="ADonor">True if Donor, false if Recipient</param>
        /// <param name="APartnerKey"></param>
        /// <param name="AParentForm"></param>
        public static void OpenWindowDonorRecipientHistory(bool ADonor, Int64 APartnerKey, Form AParentForm)
        {
            if (APartnerKey == -1)
            {
                MessageBox.Show(Catalog.GetString("No current partner selected"));
                return;
            }

            Ict.Petra.Client.MFinance.Gui.Gift.TFrmDonorRecipientHistory frmDRH = new  Ict.Petra.Client.MFinance.Gui.Gift.TFrmDonorRecipientHistory(
                AParentForm);

            // if the user does not have permission to access any Ledgers
            if (((DataView)frmDRH.cmbLedger.cmbCombobox.DataSource).Count == 0)
            {
                TLstFolderNavigation.ShowMessageNoAccessToFinanceModuleDueToNoLedgerEnabled(Catalog.GetString("Finance"));

                return;
            }

            try
            {
                frmDRH.Cursor = Cursors.WaitCursor;

                if (ADonor)
                {
                    frmDRH.Donor = APartnerKey;
                }
                else
                {
                    frmDRH.Recipient = APartnerKey;
                }

                frmDRH.EnableLedgerDropdown();
                frmDRH.Search();
                frmDRH.Show();
            }
            finally
            {
                frmDRH.Cursor = Cursors.Default;
            }
        }
        private void OnSubmoduleChanged(TTaskList ATaskList, XmlNode ATaskListNode, LinkLabel AItemClicked)
        {
            const string DetailTextPrefix     = "» ";
            string       ModuleText           = String.Empty;
            string       BreadcrumbDetailText = String.Empty;

            if ((ATaskListNode.ParentNode.Attributes["SkipThisLevel"] != null) &&
                (ATaskListNode.ParentNode.Attributes["SkipThisLevel"].Value == "true"))
            {
                ModuleText           = TLstFolderNavigation.GetLabel(ATaskListNode.ParentNode.ParentNode);
                BreadcrumbDetailText = DetailTextPrefix + AItemClicked.Text;
            }
            else
            {
                if ((ATaskListNode.ParentNode.Attributes["DontShowNestedTasksAsLinks"] == null) ||
                    (ATaskListNode.ParentNode.Attributes["DontShowNestedTasksAsLinks"].Value == "false"))
                {
                    if ((ATaskListNode.ParentNode.ParentNode.Attributes["DependsOnLedger"] == null) ||
                        (ATaskListNode.ParentNode.ParentNode.Attributes["DependsOnLedger"].Value == "false"))
                    {
                        ModuleText = TLstFolderNavigation.GetLabel(ATaskListNode.ParentNode.ParentNode);
                    }
                    else
                    {
                        ModuleText = Catalog.GetString("Ledger" + " " + FCurrentLedger.ToString());
                    }

                    BreadcrumbDetailText = DetailTextPrefix + TLstFolderNavigation.GetLabel(ATaskListNode.ParentNode) + " ";
                }

                BreadcrumbDetailText += DetailTextPrefix + AItemClicked.Text;
            }

            FBreadcrumbTrail.ModuleText = ModuleText;
            FBreadcrumbTrail.DetailText = BreadcrumbDetailText;

            // this is needed when there is just one ledger existing as item structure will be different
            UpdateSubsystemLinkStatus(FCurrentLedger, ATaskList, ATaskListNode);
        }