Example #1
0
        /// <summary>
        /// opens Early Late Registration screen for pre selected conference
        /// </summary>
        public static void EarlyLateRegistrationsForSelectedConference(Form AParentForm)
        {
            DateTime StartDate = TRemote.MConference.Conference.WebConnectors.GetStartDate(FPartnerKey);
            DateTime EndDate = TRemote.MConference.Conference.WebConnectors.GetEndDate(FPartnerKey);

            // if one or both dates are missing for the selected conference then this screen will not open
            if ((StartDate == DateTime.MinValue) || (EndDate == DateTime.MinValue))
            {
                MessageBox.Show("The selected conference is missing a start and/or an end date. " +
                    "Go to the Conference Master Settings screen to assign a date before accessing this setup screen",
                    String.Format("Early and Late Registrations"),
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);

                return;
            }

            if (FPartnerKey > 0)
            {
                TSearchCriteria[] Search = new TSearchCriteria[1];
                Search[0] = new TSearchCriteria(PcEarlyLateTable.GetConferenceKeyDBName(), FPartnerKey);

                TFrmEarlyLateRegistrationSetup.FPartnerKey = FPartnerKey;
                TFrmEarlyLateRegistrationSetup.FStartDate = StartDate;
                TFrmEarlyLateRegistrationSetup.FEndDate = EndDate;
                TFrmEarlyLateRegistrationSetup frm = new TFrmEarlyLateRegistrationSetup(AParentForm, Search);

                frm.Show();
            }
            else
            {
                MessageBox.Show(ERRORMESSAGE, String.Format("Early and Late Registrations"),
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        /// constructor (use this one!)
        public TFrmGiftDestination(Form AParentForm, long APartnerKey) : base()
        {
            FPartnerKey = APartnerKey;

            TSearchCriteria[] Search = new TSearchCriteria[1];
            Search[0] = new TSearchCriteria(PPartnerGiftDestinationTable.GetPartnerKeyDBName(), FPartnerKey);

            Initialize(AParentForm, Search);
        }
Example #3
0
 /// <summary>
 /// simple data reader;
 /// checks for permissions of the current user;
 /// </summary>
 /// <param name="ATablename"></param>
 /// <param name="ASearchCriteria">a set of search criteria</param>
 /// <param name="AResultTable">returns typed datatable</param>
 /// <returns></returns>
 public static bool GetData(string ATablename, TSearchCriteria[] ASearchCriteria, out TTypedDataTable AResultTable)
 {
     if (FDelegateSharedGetData != null)
     {
         return FDelegateSharedGetData(ATablename, ASearchCriteria, out AResultTable);
     }
     else
     {
         throw new InvalidOperationException("Delegate 'TSharedGetData' must be initialised before calling this Method");
     }
 }
        /// <summary>
        /// Will be called by TFormsList to inform any Form that is registered in TFormsList
        /// about any 'Forms Messages' that are broadcasted.
        /// </summary>
        /// <remarks>Theis screen 'listens' to such 'Forms Message' broadcasts by
        /// implementing this virtual Method. This Method will be called each time a
        /// 'Forms Message' broadcast occurs.
        /// </remarks>
        /// <param name="AFormsMessage">An instance of a 'Forms Message'. This can be
        /// inspected for parameters in the Method Body and the Form can use those to choose
        /// to react on the Message, or not.</param>
        /// <returns>Returns True if the Form reacted on the specific Forms Message,
        /// otherwise false.</returns>
        public bool ProcessFormsMessage(TFormsMessage AFormsMessage)
        {
            bool MessageProcessed = false;

            if ((AFormsMessage.MessageClass == TFormsMessageClassEnum.mcPersonnelCommitmentChanged)
                && (((IFormsMessagePartnerInterface)AFormsMessage.MessageObject).PartnerKey == FPartnerKey))
            {
                TSearchCriteria[] Search = new TSearchCriteria[1];
                Search[0] = new TSearchCriteria(PPartnerGiftDestinationTable.GetPartnerKeyDBName(), FPartnerKey);

                FMainDS = new TLocalMainTDS();
                Ict.Common.Data.TTypedDataTable TypedTable;
                TRemote.MCommon.DataReader.WebConnectors.GetData(PPartnerGiftDestinationTable.GetTableDBName(), Search, out TypedTable);
                FMainDS.PPartnerGiftDestination.Merge(TypedTable);

                SetupGrid();
                UpdateRecordNumberDisplay();
                SelectRowInGrid(1);

                MessageProcessed = true;
            }

            return MessageProcessed;
        }
        public static bool GetData(string ATablename, TSearchCriteria[] ASearchCriteria, out TTypedDataTable AResultTable)
        {
            // TODO: check access permissions for the current user

            bool NewTransaction = false;
            TDBTransaction ReadTransaction;

            TTypedDataTable tempTable = null;

            try
            {
                ReadTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead,
                    TEnforceIsolationLevel.eilMinimum,
                    out NewTransaction);

                // TODO: auto generate
                if (ATablename == AApSupplierTable.GetTableDBName())
                {
                    tempTable = AApSupplierAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == AApDocumentTable.GetTableDBName())
                {
                    tempTable = AApDocumentAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == ATransactionTypeTable.GetTableDBName())
                {
                    tempTable = ATransactionTypeAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == ACurrencyTable.GetTableDBName())
                {
                    tempTable = ACurrencyAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == ADailyExchangeRateTable.GetTableDBName())
                {
                    tempTable = ADailyExchangeRateAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == ACorporateExchangeRateTable.GetTableDBName())
                {
                    tempTable = ACorporateExchangeRateAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == ACurrencyLanguageTable.GetTableDBName())
                {
                    tempTable = ACurrencyLanguageAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == AFeesPayableTable.GetTableDBName())
                {
                    tempTable = AFeesPayableAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == AFeesReceivableTable.GetTableDBName())
                {
                    tempTable = AFeesReceivableAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == AAnalysisTypeTable.GetTableDBName())
                {
                    tempTable = AAnalysisTypeAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == AGiftBatchTable.GetTableDBName())
                {
                    tempTable = AGiftBatchAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == AJournalTable.GetTableDBName())
                {
                    tempTable = AJournalAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == ALedgerTable.GetTableDBName())
                {
                    tempTable = ALedgerAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == MExtractMasterTable.GetTableDBName())
                {
                    if (ASearchCriteria == null)
                    {
                        tempTable = MExtractMasterAccess.LoadAll(ReadTransaction);
                    }
                    else
                    {
                        tempTable = MExtractMasterAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                }
                else if (ATablename == MExtractTable.GetTableDBName())
                {
                    // it does not make sense to load ALL extract rows for all extract masters so search criteria needs to be set
                    if (ASearchCriteria != null)
                    {
                        tempTable = MExtractAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                }
                else if (ATablename == PcAttendeeTable.GetTableDBName())
                {
                    tempTable = PcAttendeeAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PcConferenceCostTable.GetTableDBName())
                {
                    tempTable = PcConferenceCostAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PcEarlyLateTable.GetTableDBName())
                {
                    tempTable = PcEarlyLateAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PcSupplementTable.GetTableDBName())
                {
                    tempTable = PcSupplementAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PcDiscountTable.GetTableDBName())
                {
                    tempTable = PcDiscountAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PInternationalPostalTypeTable.GetTableDBName())
                {
                    tempTable = PInternationalPostalTypeAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == PtApplicationTypeTable.GetTableDBName())
                {
                    tempTable = PtApplicationTypeAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == PMailingTable.GetTableDBName())
                {
                    tempTable = PMailingAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == PPartnerGiftDestinationTable.GetTableDBName())
                {
                    tempTable = PPartnerGiftDestinationAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                }
                else if (ATablename == PmDocumentTypeTable.GetTableDBName())
                {
                    tempTable = PmDocumentTypeAccess.LoadAll(ReadTransaction);
                }
                else if (ATablename == SGroupTable.GetTableDBName())
                {
                    tempTable = SGroupAccess.LoadAll(ReadTransaction);
                }
                else
                {
                    throw new Exception("TCommonDataReader.GetData: unknown table " + ATablename);
                }
            }
            catch (Exception Exp)
            {
                DBAccess.GDBAccessObj.RollbackTransaction();
                TLogging.Log("TCommonDataReader.GetData exception: " + Exp.ToString(), TLoggingType.ToLogfile);
                TLogging.Log(Exp.StackTrace, TLoggingType.ToLogfile);
                throw;
            }
            finally
            {
                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.CommitTransaction();
                    TLogging.LogAtLevel(7, "TCommonDataReader.GetData: committed own transaction.");
                }
            }

            // Accept row changes here so that the Client gets 'unmodified' rows
            tempTable.AcceptChanges();

            // return the table
            AResultTable = tempTable;

            return true;
        }
Example #6
0
 /// <summary>
 /// simple data reader;
 /// checks for permissions of the current user;
 /// </summary>
 /// <param name="ATablename"></param>
 /// <param name="ASearchCriteria">a set of search criteria</param>
 /// <param name="AResultTable">returns typed datatable</param>
 /// <returns></returns>
 public static bool GetData(string ATablename, TSearchCriteria[] ASearchCriteria, out TTypedDataTable AResultTable)
 {
     return TRemote.MCommon.DataReader.WebConnectors.GetData(ATablename, ASearchCriteria, out AResultTable);
 }
Example #7
0
        /// <summary>
        /// This function expects a string list of all existing columns,
        /// and a criteria list of values to search for.
        /// It will return a Where clause, using the given values.
        /// It does not contain the WHERE keyword.
        /// It uses the long form, table.fieldname
        ///
        /// </summary>
        /// <param name="ATableName">the table that the where clause is generated for</param>
        /// <param name="ASearchCriteria"></param>
        /// <returns>the Where Clause
        /// </returns>
        public static String GenerateWhereClauseLong(String ATableName, TSearchCriteria[] ASearchCriteria)
        {
            String ReturnValue = "";

            foreach (TSearchCriteria searchcriterium in ASearchCriteria)
            {
                ReturnValue += " AND " + ATableName + '.' + searchcriterium.fieldname + ' ' + searchcriterium.comparator + " ?";
            }

            return ReturnValue;
        }
Example #8
0
        /// <summary>
        /// This function expects an empty table that contains all existing columns,
        /// and search criteria.
        /// It will return a Where clause, using the given values.
        /// </summary>
        /// <param name="ASearchCriteria"></param>
        /// <returns>the Where Clause
        /// </returns>
        public static String GenerateWhereClause(TSearchCriteria[] ASearchCriteria)
        {
            String ReturnValue = "";

            foreach (TSearchCriteria searchcriterium in ASearchCriteria)
            {
                if (ReturnValue.Length == 0)                     //first time around
                {
                    ReturnValue = " WHERE ";
                }
                else
                {
                    ReturnValue += " AND ";
                }

                ReturnValue += searchcriterium.fieldname + " " + searchcriterium.comparator + " ?";
            }

            return ReturnValue;
        }
Example #9
0
        /// <summary>
        /// opens Child Discount screen for pre selected conference
        /// </summary>
        public static void ChildDiscountsForSelectedConference(Form AParentForm)
        {
            if (FPartnerKey > 0)
            {
                TSearchCriteria[] Search = new TSearchCriteria[2];
                Search[0] = new TSearchCriteria(PcDiscountTable.GetConferenceKeyDBName(), FPartnerKey);
                Search[1] = new TSearchCriteria(PcDiscountTable.GetDiscountCriteriaCodeDBName(), "CHILD");

                TFrmChildDiscountSetup.FPartnerKey = FPartnerKey;
                TFrmChildDiscountSetup frm = new TFrmChildDiscountSetup(AParentForm, Search);

                frm.Show();
            }
            else
            {
                MessageBox.Show(ERRORMESSAGE, String.Format("Child Discounts"),
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Example #10
0
 /// <summary>
 /// loads all rows matching certain search criteria into a typed data table
 /// </summary>
 /// <param name="ATableID">specify which typed table is used</param>
 /// <param name="ATypedTableToLoad">pre condition: has to have an object of the typed table</param>
 /// <param name="ASearchCriteria"></param>
 /// <param name="AFieldList"></param>
 /// <param name="ATransaction"></param>
 /// <param name="AOrderBy"></param>
 /// <param name="AStartRecord"></param>
 /// <param name="AMaxRecords"></param>
 public static void LoadUsingTemplate(
     short ATableID,
     TTypedDataTable ATypedTableToLoad,
     TSearchCriteria[] ASearchCriteria,
     StringCollection AFieldList,
     TDBTransaction ATransaction,
     StringCollection AOrderBy,
     int AStartRecord,
     int AMaxRecords)
 {
     ATypedTableToLoad = (TTypedDataTable)
                         DBAccess.GDBAccessObj.SelectDT(ATypedTableToLoad, GenerateSelectClause(AFieldList, ATableID) +
         " FROM PUB_" + TTypedDataTable.GetTableNameSQL(ATableID) +
         GenerateWhereClause(ASearchCriteria) +
         GenerateOrderByClause(AOrderBy), ATransaction,
         GetParametersForWhereClause(ATableID, ASearchCriteria), AStartRecord, AMaxRecords);
 }
Example #11
0
 /// count the rows by the values of a foreign key
 public static int CountViaForeignKey(
     short ATableId, short AOtherTableId,
     string[] AThisFieldNames,
     TSearchCriteria[] ASearchCriteria,
     TDBTransaction ATransaction)
 {
     OdbcParameter[] ParametersArray = GetParametersForWhereClause(AOtherTableId, ASearchCriteria);
     return Convert.ToInt32(DBAccess.GDBAccessObj.ExecuteScalar(
             "SELECT COUNT(*) FROM PUB_" + TTypedDataTable.GetTableNameSQL(ATableId) +
             GenerateWhereClause(AThisFieldNames) +
             GenerateWhereClauseLong("PUB_" + TTypedDataTable.GetTableNameSQL(AOtherTableId),
                 ASearchCriteria),
             ATransaction,
             ParametersArray));
 }
Example #12
0
 /// Load via other table, using template values
 public static void LoadViaForeignKey(
     short ATableId,
     short AOtherTableId,
     TTypedDataTable ADataTable,
     string[] AThisFieldNames,
     TSearchCriteria[] ASearchCriteria,
     StringCollection AFieldList,
     TDBTransaction ATransaction,
     StringCollection AOrderBy,
     int AStartRecord,
     int AMaxRecords)
 {
     DBAccess.GDBAccessObj.SelectDT(ADataTable,
         GenerateSelectClause(AFieldList, ATableId) +
         " FROM PUB_" + TTypedDataTable.GetTableNameSQL(ATableId) + ", PUB_" + TTypedDataTable.GetTableNameSQL(AOtherTableId) +
         GenerateWhereClause(AThisFieldNames) +
         GenerateWhereClauseLong("PUB_" + TTypedDataTable.GetTableNameSQL(AOtherTableId),
             ASearchCriteria) +
         GenerateOrderByClause(AOrderBy),
         ATransaction,
         GetParametersForWhereClause(AOtherTableId, ASearchCriteria),
         AStartRecord, AMaxRecords);
 }
Example #13
0
        /// <summary>
        /// This function provides the actual parameters for the GenerateWhereClause
        /// </summary>
        /// <returns>an array of OdbcParameters
        /// </returns>
        public static OdbcParameter[] GetParametersForWhereClause(short ATableNumber, TSearchCriteria[] ASearchCriteria)
        {
            OdbcParameter[] ReturnValue = new OdbcParameter[ASearchCriteria.Length];
            int Counter = 0;

            foreach (TSearchCriteria searchcriterium in ASearchCriteria)
            {
                ReturnValue[Counter] = TTypedDataTable.CreateOdbcParameter(ATableNumber, searchcriterium);
                ReturnValue[Counter].Value = searchcriterium.searchvalue;
                Counter = Counter + 1;
            }

            return ReturnValue;
        }
Example #14
0
        /// <summary>
        /// opens Standard Cost screen for pre selected conference
        /// </summary>
        public static void StandardCostsForSelectedConference(Form AParentForm)
        {
            if (FPartnerKey > 0)
            {
                TSearchCriteria[] Search = new TSearchCriteria[1];
                Search[0] = new TSearchCriteria(PcConferenceCostTable.GetConferenceKeyDBName(), FPartnerKey);

                TFrmConferenceStandardCostSetup.FPartnerKey = FPartnerKey;
                TFrmConferenceStandardCostSetup frm = new TFrmConferenceStandardCostSetup(AParentForm, Search);

                frm.Show();
            }
            else
            {
                MessageBox.Show(ERRORMESSAGE, String.Format("Conference Standard Costs"),
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Example #15
0
        public static bool DeletePartner(Int64 APartnerKey, out TVerificationResultCollection AVerificationResult)
        {
            string ShortName;
            TPartnerClass PartnerClass;
            TStdPartnerStatusCode PartnerStatusCode;
            bool ResultValue = false;

            AVerificationResult = null;
            ResultValue = true;

            TDBTransaction Transaction = null;
            bool SubmissionOK = false;

            DBAccess.GDBAccessObj.GetNewOrExistingAutoTransaction(IsolationLevel.Serializable, TEnforceIsolationLevel.eilMinimum,
                ref Transaction, ref SubmissionOK,
                delegate
                {
                    ResultValue =
                        MCommonMain.RetrievePartnerShortName(APartnerKey, out ShortName, out PartnerClass, out PartnerStatusCode, Transaction);

                    /* s_user - delete not allowed by CanPartnerBeDeleted */
                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PRecentPartnersTable.GetTableDBName(),
                            PRecentPartnersTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerGraphicTable.GetTableDBName(),
                            PPartnerGraphicTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    /* Delete extract entries before possibly attempting to delete a  */
                    /* location record referenced in the extract.  Decrease key count */
                    /* in m_extract_master.                                           */
                    if (ResultValue)
                    {
                        // first make sure that extract master tables are up to date
                        // (decrease key count by number of rows to be deleted)
                        MExtractMasterTable ExtractMasterTable;
                        MExtractMasterRow ExtractMasterRow;
                        MExtractTable ExtractTable = MExtractAccess.LoadViaPPartner(APartnerKey, Transaction);

                        foreach (DataRow Row in ExtractTable.Rows)
                        {
                            ExtractMasterTable = MExtractMasterAccess.LoadByPrimaryKey(((MExtractRow)Row).ExtractId, Transaction);
                            ExtractMasterRow = (MExtractMasterRow)ExtractMasterTable.Rows[0];
                            ExtractMasterRow.KeyCount = ExtractMasterRow.KeyCount - 1;
                            MExtractMasterAccess.SubmitChanges(ExtractMasterTable, Transaction);
                        }

                        // now delete the actual extract entries
                        ResultValue = DeleteEntries(MExtractTable.GetTableDBName(),
                            MExtractTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    // Delete Partner Location. If locations were only used by this partner then also delete location record.
                    if (ResultValue)
                    {
                        PPartnerLocationTable PartnerLocationTable = PPartnerLocationAccess.LoadViaPPartner(APartnerKey, Transaction);
                        PPartnerLocationTable OtherPartnerLocationTable;
                        PPartnerLocationRow PartnerLocationRow;
                        PLocationRow LocationRow;
                        PLocationTable LocationTableToDelete = new PLocationTable();

                        foreach (DataRow Row in PartnerLocationTable.Rows)
                        {
                            PartnerLocationRow = (PPartnerLocationRow)Row;
                            OtherPartnerLocationTable = PPartnerLocationAccess.LoadViaPLocation(PartnerLocationRow.SiteKey,
                                PartnerLocationRow.LocationKey,
                                Transaction);

                            // if there is only one partner left using this location (which must be this one) then delete location
                            if ((OtherPartnerLocationTable.Count == 1)
                                && (PartnerLocationRow.LocationKey != 0))
                            {
                                LocationRow = LocationTableToDelete.NewRowTyped();
                                LocationRow.SiteKey = PartnerLocationRow.SiteKey;
                                LocationRow.LocationKey = PartnerLocationRow.LocationKey;
                                LocationTableToDelete.Rows.Add(LocationRow);
                            }
                        }

                        // now first delete the partner locations
                        ResultValue = DeleteEntries(PPartnerLocationTable.GetTableDBName(),
                            PPartnerLocationTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);

                        // and now locations if they don't refer to any partners any longer
                        foreach (DataRow RowToDelete in LocationTableToDelete.Rows)
                        {
                            LocationRow = (PLocationRow)RowToDelete;
                            PLocationAccess.DeleteByPrimaryKey(LocationRow.SiteKey, LocationRow.LocationKey, Transaction);
                        }
                    }

                    if (ResultValue)
                    {
                        TSearchCriteria[] PartnerAttributeAccessSC = new TSearchCriteria[] {
                            new TSearchCriteria(PPartnerAttributeTable.GetPartnerKeyDBName(),
                                APartnerKey)
                        };

                        if (PPartnerAttributeAccess.CountUsingTemplate(PartnerAttributeAccessSC, Transaction) > 0)
                        {
                            PPartnerAttributeAccess.DeleteUsingTemplate(PartnerAttributeAccessSC, Transaction);
                        }
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PChurchTable.GetTableDBName(),
                            PChurchTable.GetContactPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(POrganisationTable.GetTableDBName(),
                            POrganisationTable.GetContactPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PBankTable.GetTableDBName(),
                            PBankTable.GetContactPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PVenueTable.GetTableDBName(),
                            PVenueTable.GetContactPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    // Delete Partner Banking Details.
                    // If Banking Details were only used by this partner then also delete Banking Details record.
                    if (ResultValue)
                    {
                        PPartnerBankingDetailsTable PartnerBankingDetailsTable =
                            PPartnerBankingDetailsAccess.LoadViaPPartner(APartnerKey, Transaction);
                        PPartnerBankingDetailsTable OtherPartnerBankingDetailsTable;
                        PPartnerBankingDetailsRow PartnerBankingDetailsRow;
                        PBankingDetailsRow BankingDetailsRow;
                        PBankingDetailsTable BankingDetailsTableToDelete = new PBankingDetailsTable();

                        foreach (DataRow Row in PartnerBankingDetailsTable.Rows)
                        {
                            PartnerBankingDetailsRow = (PPartnerBankingDetailsRow)Row;
                            OtherPartnerBankingDetailsTable = PPartnerBankingDetailsAccess.LoadViaPBankingDetails(
                                PartnerBankingDetailsRow.BankingDetailsKey,
                                Transaction);

                            // if there is only one partner left using this banking details record (which must be this one) then delete banking details
                            if (OtherPartnerBankingDetailsTable.Count == 1)
                            {
                                BankingDetailsRow = BankingDetailsTableToDelete.NewRowTyped();
                                BankingDetailsRow.BankingDetailsKey = PartnerBankingDetailsRow.BankingDetailsKey;
                                BankingDetailsTableToDelete.Rows.Add(BankingDetailsRow);
                            }
                        }

                        // now first delete the partner banking details
                        ResultValue = DeleteEntries(PPartnerBankingDetailsTable.GetTableDBName(),
                            PPartnerBankingDetailsTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);

                        // and now banking details if they don't refer to any partners any longer
                        foreach (DataRow RowToDelete in BankingDetailsTableToDelete.Rows)
                        {
                            BankingDetailsRow = (PBankingDetailsRow)RowToDelete;
                            PBankingDetailsAccess.DeleteByPrimaryKey(BankingDetailsRow.BankingDetailsKey, Transaction);
                        }
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerTypeTable.GetTableDBName(),
                            PPartnerTypeTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerRelationshipTable.GetTableDBName(),
                            PPartnerRelationshipTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerRelationshipTable.GetTableDBName(),
                            PPartnerRelationshipTable.GetRelationKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PCustomisedGreetingTable.GetTableDBName(),
                            PCustomisedGreetingTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PSubscriptionTable.GetTableDBName(),
                            PSubscriptionTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    // delete reminders before contacts
                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerReminderTable.GetTableDBName(),
                            PPartnerReminderTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    var partnerContacts = MPartner.Partner.WebConnectors.TContactsWebConnector.GetPartnerContactLogData(APartnerKey).PPartnerContact
                                          .AsEnumerable().Select(r =>
                        {
                            var id = r.ItemArray[PPartnerContactTable.ColumnContactLogIdId];
                            return new { ContactLogId = id, deleteThis = !TContactsWebConnector.IsContactLogAssociatedWithMoreThanOnePartner((long)id) };
                        });

                    // Delete contact attributes before deleting contacts
                    if (ResultValue)
                    {
                        String SqlStmt;

                        foreach (var row in partnerContacts)
                        {
                            if (row.deleteThis)
                            {
                                try
                                {
                                    // build sql statement for deletion
                                    SqlStmt = "DELETE FROM " + PPartnerContactAttributeTable.GetTableDBName() +
                                              " WHERE " + PPartnerContactAttributeTable.GetContactIdDBName() +
                                              " IN (SELECT " + PPartnerContactTable.GetContactLogIdDBName() +
                                              " FROM " + PPartnerContactTable.GetTableDBName() +
                                              " WHERE " + PPartnerContactTable.GetPartnerKeyDBName() + " = " + APartnerKey.ToString() +
                                              " AND " + PPartnerContactTable.GetContactLogIdDBName() + " = " + row.ContactLogId + ")";

                                    DBAccess.GDBAccessObj.ExecuteNonQuery(SqlStmt, Transaction);
                                }
                                catch (Exception Exc)
                                {
                                    TLogging.Log(
                                        "An Exception occured during the deletion of " + PPartnerContactAttributeTable.GetTableDBName() +
                                        " while deleting a partner: " + Environment.NewLine + Exc.ToString());

                                    throw;
                                }
                            }
                        }
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerContactTable.GetTableDBName(),
                            PPartnerContactTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    // Delete any would-be orphaned ContactLog records
                    if (ResultValue)
                    {
                        foreach (var r in partnerContacts.Where(p => p.deleteThis))
                        {
                            PContactLogAccess.DeleteByPrimaryKey((long)r.ContactLogId, Transaction);
                        }
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(AEmailDestinationTable.GetTableDBName(),
                            AEmailDestinationTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(AMotivationDetailTable.GetTableDBName(),
                            AMotivationDetailTable.GetRecipientKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    /* a_recurring_gift - delete not allowed by CanPartnerBeDeleted */
                    /* a_recurring_gift_detail - delete not allowed by CanPartnerBeDeleted */
                    /* a_gift - delete not allowed by CanPartnerBeDeleted */
                    /* a_gift_detail - delete not allowed by CanPartnerBeDeleted */
                    /* a_ap_supplier - delete not allowed by CanPartnerBeDeleted */

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PmDocumentTable.GetTableDBName(),
                            PmDocumentTable.GetContactPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PDataLabelValuePartnerTable.GetTableDBName(),
                            PDataLabelValuePartnerTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PDataLabelValuePartnerTable.GetTableDBName(),
                            PDataLabelValuePartnerTable.GetValuePartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PDataLabelValueApplicationTable.GetTableDBName(),
                            PDataLabelValueApplicationTable.GetValuePartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PmJobAssignmentTable.GetTableDBName(),
                            PmJobAssignmentTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PTaxTable.GetTableDBName(),
                            PTaxTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerInterestTable.GetTableDBName(),
                            PPartnerInterestTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerMergeTable.GetTableDBName(),
                            PPartnerMergeTable.GetMergeFromDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerMergeTable.GetTableDBName(),
                            PPartnerMergeTable.GetMergeToDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerGiftDestinationTable.GetTableDBName(),
                            PPartnerGiftDestinationTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerCommentTable.GetTableDBName(),
                            PPartnerCommentTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PFoundationTable.GetTableDBName(),
                            PFoundationTable.GetContactPartnerDBName(),
                            APartnerKey, Transaction);
                    }

                    if (ResultValue)
                    {
                        ResultValue = ZeroEntries(PFoundationProposalTable.GetTableDBName(),
                            PFoundationProposalTable.GetPartnerSubmittedByDBName(),
                            APartnerKey, Transaction);
                    }

                    // now delete partner class specific information
                    if (ResultValue)
                    {
                        switch (PartnerClass)
                        {
                            case TPartnerClass.FAMILY:
                                ResultValue = DeleteFamily(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.PERSON:
                                ResultValue = DeletePerson(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.UNIT:
                                ResultValue = DeleteUnit(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.ORGANISATION:
                                ResultValue = DeleteOrganisation(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.CHURCH:
                                ResultValue = DeleteChurch(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.BANK:
                                ResultValue = DeleteBank(APartnerKey, Transaction);
                                break;

                            case TPartnerClass.VENUE:
                                ResultValue = DeleteVenue(APartnerKey, Transaction);
                                break;

                            default:
                                break;
                        }
                    }

                    // finally delete p_partner record itself
                    if (ResultValue)
                    {
                        ResultValue = DeleteEntries(PPartnerTable.GetTableDBName(),
                            PPartnerTable.GetPartnerKeyDBName(),
                            APartnerKey, Transaction);

                        SubmissionOK = true;
                    }
                });

            return ResultValue;
        }
        public static bool GetData(string ATablename, TSearchCriteria[] ASearchCriteria, out TTypedDataTable AResultTable)
        {
            // TODO: check access permissions for the current user

            TDBTransaction ReadTransaction = null;

            TTypedDataTable tempTable = null;

            DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.RepeatableRead,
                TEnforceIsolationLevel.eilMinimum,
                ref ReadTransaction,
                delegate
                {
                    // TODO: auto generate
                    if (ATablename == AApSupplierTable.GetTableDBName())
                    {
                        tempTable = AApSupplierAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == AApDocumentTable.GetTableDBName())
                    {
                        tempTable = AApDocumentAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == ATransactionTypeTable.GetTableDBName())
                    {
                        tempTable = ATransactionTypeAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == ACurrencyTable.GetTableDBName())
                    {
                        tempTable = ACurrencyAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == ADailyExchangeRateTable.GetTableDBName())
                    {
                        tempTable = ADailyExchangeRateAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == ACorporateExchangeRateTable.GetTableDBName())
                    {
                        tempTable = ACorporateExchangeRateAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == ACurrencyLanguageTable.GetTableDBName())
                    {
                        tempTable = ACurrencyLanguageAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == AFeesPayableTable.GetTableDBName())
                    {
                        tempTable = AFeesPayableAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == AFeesReceivableTable.GetTableDBName())
                    {
                        tempTable = AFeesReceivableAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == AAnalysisTypeTable.GetTableDBName())
                    {
                        tempTable = AAnalysisTypeAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == AGiftBatchTable.GetTableDBName())
                    {
                        tempTable = AGiftBatchAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == AJournalTable.GetTableDBName())
                    {
                        tempTable = AJournalAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == ALedgerTable.GetTableDBName())
                    {
                        tempTable = ALedgerAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == MExtractMasterTable.GetTableDBName())
                    {
                        if (ASearchCriteria == null)
                        {
                            tempTable = MExtractMasterAccess.LoadAll(ReadTransaction);
                        }
                        else
                        {
                            tempTable = MExtractMasterAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                        }
                    }
                    else if (ATablename == MExtractTable.GetTableDBName())
                    {
                        // it does not make sense to load ALL extract rows for all extract masters so search criteria needs to be set
                        if (ASearchCriteria != null)
                        {
                            tempTable = MExtractAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                        }
                    }
                    else if (ATablename == PcAttendeeTable.GetTableDBName())
                    {
                        tempTable = PcAttendeeAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PcConferenceCostTable.GetTableDBName())
                    {
                        tempTable = PcConferenceCostAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PcEarlyLateTable.GetTableDBName())
                    {
                        tempTable = PcEarlyLateAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PcSupplementTable.GetTableDBName())
                    {
                        tempTable = PcSupplementAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PcDiscountTable.GetTableDBName())
                    {
                        tempTable = PcDiscountAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PFormTable.GetTableDBName())
                    {
                        string[] columns = TTypedDataTable.GetColumnStringList(PFormTable.TableId);
                        StringCollection fieldList = new StringCollection();

                        for (int i = 0; i < columns.Length; i++)
                        {
                            // Do not load the template document - we don't display it and it is big!
                            if (columns[i] != PFormTable.GetTemplateDocumentDBName())
                            {
                                fieldList.Add(columns[i]);
                            }
                        }

                        tempTable = PFormAccess.LoadAll(fieldList, ReadTransaction);
                    }
                    else if (ATablename == PInternationalPostalTypeTable.GetTableDBName())
                    {
                        tempTable = PInternationalPostalTypeAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == PtApplicationTypeTable.GetTableDBName())
                    {
                        tempTable = PtApplicationTypeAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == PFormalityTable.GetTableDBName())
                    {
                        tempTable = PFormalityAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == PMailingTable.GetTableDBName())
                    {
                        tempTable = PMailingAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == PPartnerGiftDestinationTable.GetTableDBName())
                    {
                        tempTable = PPartnerGiftDestinationAccess.LoadUsingTemplate(ASearchCriteria, ReadTransaction);
                    }
                    else if (ATablename == PmDocumentTypeTable.GetTableDBName())
                    {
                        tempTable = PmDocumentTypeAccess.LoadAll(ReadTransaction);
                    }
                    else if (ATablename == SGroupTable.GetTableDBName())
                    {
                        tempTable = SGroupAccess.LoadAll(ReadTransaction);
                    }
                    else
                    {
                        throw new Exception("TCommonDataReader.GetData: unknown table " + ATablename);
                    }
                });

            // Accept row changes here so that the Client gets 'unmodified' rows
            tempTable.AcceptChanges();

            // return the table
            AResultTable = tempTable;

            return true;
        }
Example #17
0
 /// <summary>
 /// delete all rows matching the search criteria
 /// </summary>
 /// <param name="ATableId">specify which typed table is used</param>
 /// <param name="ASearchCriteria"></param>
 /// <param name="ATransaction"></param>
 public static void DeleteUsingTemplate(short ATableId, TSearchCriteria[] ASearchCriteria, TDBTransaction ATransaction)
 {
     if (0 == DBAccess.GDBAccessObj.ExecuteNonQuery(("DELETE FROM PUB_" + TTypedDataTable.GetTableNameSQL(ATableId) +
                                                     GenerateWhereClause(ASearchCriteria)),
             ATransaction,
             GetParametersForWhereClause(ATableId, ASearchCriteria)))
     {
         throw new EDBSubmitException(
             "[TTypedDataAccess.DeleteUsingTemplate {delete all rows matching the search criteria}] Problems DELETing a row: no rows were deleted.  Hint: If this can be a valid case, run one of the *Access.Count* Methods before to ensure that you don't call the present Method if there are no records to be expected!",
             eSubmitChangesOperations.eDelete);
     }
 }