Beispiel #1
0
        /// <summary>
        /// Return the specified contact details, formatted for use in an email.
        /// </summary>
        /// <param name="AContactID">The Contact ID to find.</param>
        /// <param name="AReadTransaction">Already instantiated DB Transaction.</param>
        /// <returns>Specified contact details.</returns>
        private static string GetContactDetails(long AContactID, TDBTransaction AReadTransaction)
        {
            PContactLogTable PartnerContactDT;
            PContactLogRow   PartnerContactDR;
            char             LF          = Convert.ToChar(10);
            string           ReturnValue = "";

            try
            {
                if (!PContactLogAccess.Exists(AContactID, AReadTransaction))
                {
                    return(String.Format("Contact ID {0} not found{1}", AContactID, LF));
                }

                PartnerContactDT = PContactLogAccess.LoadByPrimaryKey(AContactID, AReadTransaction);
            }
            catch (Exception Exp)
            {
                TLogging.Log("TProcessPartnerReminders.GetContactDetails encountered an Exception: " + Exp.ToString());

                throw;
            }

            PartnerContactDR = PartnerContactDT[0];

            ReturnValue = String.Format("Contact: {0} {1} {2} {3}",
                                        PartnerContactDR.Contactor,
                                        PartnerContactDR.ContactDate.Date,
                                        PartnerContactDR.ContactCode,
                                        Environment.NewLine);

            return(ReturnValue);
        }
Beispiel #2
0
        /// <summary>
        /// todoComment
        /// </summary>
        /// <param name="APartnerKey"></param>
        /// <param name="ALastContactDate"></param>
        /// <param name="ADataBase">An instantiated <see cref="TDataBase" /> object, or null (default = null). If null
        /// gets passed then the Method executes DB commands with the 'globally available'
        /// <see cref="DBAccess.GDBAccessObj" /> instance, otherwise with the instance that gets passed in with this
        /// Argument!</param>
        public static void GetLastContactDate(Int64 APartnerKey, out DateTime ALastContactDate,
                                              TDataBase ADataBase = null)
        {
            TDBTransaction ReadTransaction = null;

            DataSet        LastContactDS;
            PContactLogRow ContactDR;
            DateTime       LastContactDate = new DateTime();

            LastContactDS = new DataSet("LastContactDate");
            LastContactDS.Tables.Add(new PContactLogTable());

            DBAccess.GetDBAccessObj(ADataBase).GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted,
                                                                                   TEnforceIsolationLevel.eilMinimum,
                                                                                   ref ReadTransaction,
                                                                                   delegate
            {
                PContactLogAccess.LoadViaPPartnerPPartnerContact(LastContactDS, APartnerKey,
                                                                 StringHelper.InitStrArr(new String[] { PContactLogTable.GetContactDateDBName() }), ReadTransaction,
                                                                 StringHelper.InitStrArr(new String[] { "ORDER BY " + PContactLogTable.GetContactDateDBName() + " DESC" }), 0, 1);

                if (LastContactDS.Tables[PContactLogTable.GetTableName()].Rows.Count > 0)
                {
                    ContactDR       = ((PContactLogTable)LastContactDS.Tables[PContactLogTable.GetTableName()])[0];
                    LastContactDate = ContactDR.ContactDate;
                }
                else
                {
                    LastContactDate = DateTime.MinValue;
                }
            });

            ALastContactDate = LastContactDate;
        }
Beispiel #3
0
        /// <summary>
        /// todoComment
        /// </summary>
        /// <param name="APartnerKey"></param>
        /// <param name="ALastContactDate"></param>
        public static void GetLastContactDate(Int64 APartnerKey, out DateTime ALastContactDate)
        {
            TDBTransaction ReadTransaction;
            Boolean        NewTransaction;
            DataSet        LastContactDS;
            PContactLogRow ContactDR;

            LastContactDS = new DataSet("LastContactDate");
            LastContactDS.Tables.Add(new PContactLogTable());
            ReadTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.ReadCommitted,
                                                                                TEnforceIsolationLevel.eilMinimum,
                                                                                out NewTransaction);
            PContactLogAccess.LoadViaPPartnerPPartnerContact(LastContactDS, APartnerKey,
                                                             StringHelper.InitStrArr(new String[] { PContactLogTable.GetContactDateDBName() }), ReadTransaction,
                                                             StringHelper.InitStrArr(new String[] { "ORDER BY " + PContactLogTable.GetContactDateDBName() + " DESC" }), 0, 1);

            if (LastContactDS.Tables[PContactLogTable.GetTableName()].Rows.Count > 0)
            {
                ContactDR        = ((PContactLogTable)LastContactDS.Tables[PContactLogTable.GetTableName()])[0];
                ALastContactDate = ContactDR.ContactDate;
            }
            else
            {
                ALastContactDate = DateTime.MinValue;
            }

            if (NewTransaction)
            {
                DBAccess.GDBAccessObj.CommitTransaction();
                TLogging.LogAtLevel(7, "TMailroom.GetLastContactDate: committed own transaction.");
            }
        }
Beispiel #4
0
        /// <summary>
        /// todoComment
        /// </summary>
        /// <param name="APartnerKey"></param>
        /// <param name="ALastContactDate"></param>
        /// <param name="ADataBase">An instantiated <see cref="TDataBase" /> object, or null (default = null). If null
        /// gets passed then the Method executes DB commands with a new Database connection</param>
        public static void GetLastContactDate(Int64 APartnerKey, out DateTime ALastContactDate,
                                              TDataBase ADataBase = null)
        {
            TDBTransaction ReadTransaction = new TDBTransaction();

            DataSet        LastContactDS;
            PContactLogRow ContactDR;
            DateTime       LastContactDate = new DateTime();

            LastContactDS = new DataSet("LastContactDate");
            LastContactDS.Tables.Add(new PContactLogTable());

            TDataBase db = DBAccess.Connect("GetLastContactDate", ADataBase);

            db.ReadTransaction(
                ref ReadTransaction,
                delegate
            {
                PContactLogAccess.LoadViaPPartner(LastContactDS, APartnerKey,
                                                  StringHelper.InitStrArr(new String[] { PContactLogTable.GetContactDateDBName() }), ReadTransaction,
                                                  StringHelper.InitStrArr(new String[] { "ORDER BY " + PContactLogTable.GetContactDateDBName() + " DESC" }), 0, 1);

                if (LastContactDS.Tables[PContactLogTable.GetTableName()].Rows.Count > 0)
                {
                    ContactDR       = ((PContactLogTable)LastContactDS.Tables[PContactLogTable.GetTableName()])[0];
                    LastContactDate = ContactDR.ContactDate;
                }
                else
                {
                    LastContactDate = DateTime.MinValue;
                }
            });

            ALastContactDate = LastContactDate;
        }
Beispiel #5
0
        public static PContactLogTable FindContactLogsForPartner(long partnerKey)
        {
            Boolean          NewTransaction;
            PContactLogTable contacts = new PContactLogTable();

            TDBTransaction WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.ReadCommitted,
                                                                                                TEnforceIsolationLevel.eilMinimum, out NewTransaction);

            try
            {
                contacts = PContactLogAccess.LoadViaPPartnerPPartnerContact(partnerKey, WriteTransaction);
            }
            catch (Exception e)
            {
                TLogging.Log(e.Message);
                TLogging.Log(e.StackTrace);
            }

            if (NewTransaction)
            {
                DBAccess.GDBAccessObj.RollbackTransaction();
            }

            return(contacts);
        }
Beispiel #6
0
        public static void DeleteContacts(
            DataTable AContactLogs)
        {
            TDBTransaction Transaction  = new TDBTransaction();
            bool           SubmissionOK = false;

            DBAccess.WriteTransaction(
                ref Transaction,
                ref SubmissionOK,
                delegate
            {
                Boolean LastPartnerForThisContactLog = true;

                foreach (DataRow contactLogRow in AContactLogs.Rows)
                {
                    Int64 ContactLogId = Convert.ToInt64(contactLogRow["p_contact_log_id_i"]);
                    Int64 PartnerKey   = Convert.ToInt64(contactLogRow["p_partner_key_n"]);

                    LastPartnerForThisContactLog = true;

                    if (IsContactLogAssociatedWithMoreThanOnePartner(ContactLogId, Transaction))
                    {
                        LastPartnerForThisContactLog = false;
                    }

                    PPartnerContactTable contactLogs = PPartnerContactAccess.LoadByPrimaryKey(
                        PartnerKey, ContactLogId, Transaction);

                    contactLogs[0].Delete();

                    PPartnerContactAccess.SubmitChanges(contactLogs, Transaction);

                    if (LastPartnerForThisContactLog)
                    {
                        // now we also need to delete the contact attributes (linked with this contact log)
                        PPartnerContactAttributeRow template = new PPartnerContactAttributeTable().NewRowTyped(false);
                        template.ContactId = ContactLogId;

                        if (PPartnerContactAttributeAccess.CountUsingTemplate(template, null, Transaction) > 0)
                        {
                            PPartnerContactAttributeAccess.DeleteUsingTemplate(template, null, Transaction);
                        }

                        // and the contact log itself needs to be deleted (if no other partner refers to it)
                        PContactLogAccess.DeleteByPrimaryKey(ContactLogId, Transaction);
                    }

                    SubmissionOK = true;
                }
            });
        }
Beispiel #7
0
        public static void AddContactLog(List <Int64> APartnerKeys,
                                         DateTime AContactDate,
                                         string AContactor,
                                         string AMethodOfContact,
                                         string AComment,
                                         string AModuleID,
                                         string AMailingCode)
        {
            TDBTransaction Transaction  = new TDBTransaction();
            bool           SubmissionOK = false;

            DBAccess.WriteTransaction(
                ref Transaction,
                ref SubmissionOK,
                delegate
            {
                PContactLogTable contacts = new PContactLogTable();
                PContactLogRow contact    = contacts.NewRowTyped();
                contact.ContactLogId      = Transaction.DataBaseObj.GetNextSequenceValue("seq_contact", Transaction);
                contact.ContactDate       = new DateTime(AContactDate.Year, AContactDate.Month, AContactDate.Day);
                //contact.ContactTime = AContactDate.Hour * 60 + AContactDate.Minute;
                contact.ContactCode    = AMethodOfContact;
                contact.ContactComment = AComment;
                contact.ModuleId       = AModuleID;
                contact.Contactor      = AContactor;
                contact.UserId         = UserInfo.GetUserInfo().UserID;
                contacts.Rows.Add(contact);

                if (AMailingCode.Length > 0)
                {
                    contact.MailingCode = AMailingCode;
                }

                // TODO: restrictions implemented via p_restricted_l or s_user_id_c

                PPartnerContactTable partnerContacts = new PPartnerContactTable();
                APartnerKeys.ForEach(partnerKey =>
                {
                    PPartnerContactRow partnerContact = partnerContacts.NewRowTyped();
                    partnerContact.ContactLogId       = contact.ContactLogId;
                    partnerContact.PartnerKey         = partnerKey;
                    partnerContacts.Rows.Add(partnerContact);
                });

                PContactLogAccess.SubmitChanges(contacts, Transaction);
                PPartnerContactAccess.SubmitChanges(partnerContacts, Transaction);

                SubmissionOK = true;
            });
        }
Beispiel #8
0
        public static void AddContactLog(int ExtractId, ref PContactLogTable ContactLogTable)
        {
            Boolean NewTransaction;

            TDBTransaction WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.Serializable,
                                                                                                TEnforceIsolationLevel.eilMinimum, out NewTransaction);

            try
            {
                var extractTable = MExtractAccess.LoadViaMExtractMaster(ExtractId, WriteTransaction).AsEnumerable();
                var partnerKeys  = extractTable.Select(e => e.ItemArray[MExtractTable.ColumnPartnerKeyId]);

                long ContactLogId = DBAccess.GDBAccessObj.GetNextSequenceValue("seq_contact", WriteTransaction);

                ContactLogTable.Rows[0][PContactLogTable.ColumnContactLogIdId] = ContactLogId;

                PPartnerContactTable partnerContacts = new PPartnerContactTable();
                partnerKeys.ToList().ForEach(partnerKey =>
                {
                    PPartnerContactRow partnerContact = partnerContacts.NewRowTyped();
                    partnerContact.ContactLogId       = ContactLogId;
                    partnerContact.PartnerKey         = (long)partnerKey;
                    partnerContacts.Rows.Add(partnerContact);
                });

                PContactLogAccess.SubmitChanges(ContactLogTable, WriteTransaction);
                PPartnerContactAccess.SubmitChanges(partnerContacts, WriteTransaction);

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.CommitTransaction();
                }
            }
            catch (Exception e)
            {
                TLogging.Log(
                    "An Exception occured during the adding of a Contact to Partners in an Extract:" +
                    Environment.NewLine + e.ToString());

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.RollbackTransaction();
                }

                throw;
            }
        }
Beispiel #9
0
        public static void DeleteContacts(
            PContactLogTable AContactLogs)
        {
            Boolean NewTransaction;

            TDBTransaction WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.Serializable,
                                                                                                TEnforceIsolationLevel.eilMinimum, out NewTransaction);

            try
            {
                foreach (PContactLogRow contactLogRow in AContactLogs.Rows)
                {
                    var contactLogs = PPartnerContactAccess.LoadViaPContactLog((long)contactLogRow[PContactLogTable.ColumnContactLogIdId],
                                                                               WriteTransaction);

                    foreach (PPartnerContactRow partnerContactRow in contactLogs.Rows)
                    {
                        partnerContactRow.Delete();
                    }

                    PPartnerContactAccess.SubmitChanges(contactLogs, WriteTransaction);
                    contactLogRow.Delete();
                }

                PContactLogAccess.SubmitChanges(AContactLogs, WriteTransaction);

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.CommitTransaction();
                }
            }
            catch (Exception Exc)
            {
                TLogging.Log("An Exception occured during the deletion of Contact Logs:" + Environment.NewLine + Exc.ToString());

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.RollbackTransaction();
                }

                throw;
            }
        }
Beispiel #10
0
        public static void AddContactLog(int AExtractId,
                                         PContactLogTable AContactLogTable,
                                         PPartnerContactAttributeTable APartnerContactAttributeTable)
        {
            TDBTransaction WriteTransaction = null;
            bool           SubmissionOK     = false;

            DBAccess.GDBAccessObj.GetNewOrExistingAutoTransaction(IsolationLevel.Serializable,
                                                                  TEnforceIsolationLevel.eilMinimum, ref WriteTransaction, ref SubmissionOK,
                                                                  delegate
            {
                var extractTable = MExtractAccess.LoadViaMExtractMaster(AExtractId, WriteTransaction).AsEnumerable();
                var partnerKeys  = extractTable.Select(e => e.ItemArray[MExtractTable.ColumnPartnerKeyId]);

                long ContactLogId = DBAccess.GDBAccessObj.GetNextSequenceValue("seq_contact", WriteTransaction);

                AContactLogTable.Rows[0][PContactLogTable.ColumnContactLogIdId] = ContactLogId;

                PPartnerContactTable partnerContacts = new PPartnerContactTable();
                partnerKeys.ToList().ForEach(partnerKey =>
                {
                    PPartnerContactRow partnerContact = partnerContacts.NewRowTyped();
                    partnerContact.ContactLogId       = ContactLogId;
                    partnerContact.PartnerKey         = (long)partnerKey;
                    partnerContacts.Rows.Add(partnerContact);
                });

                foreach (PPartnerContactAttributeRow Row in APartnerContactAttributeTable.Rows)
                {
                    Row.ContactId = ContactLogId;
                }

                PContactLogAccess.SubmitChanges(AContactLogTable, WriteTransaction);
                PPartnerContactAccess.SubmitChanges(partnerContacts, WriteTransaction);
                PPartnerContactAttributeAccess.SubmitChanges(APartnerContactAttributeTable, WriteTransaction);

                SubmissionOK = true;
            });
        }
Beispiel #11
0
        public static PartnerEditTDS GetPartnerContactLogData(long APartnerKey, TDataBase ADataBase = null)
        {
            PartnerEditTDS ReturnDS = new PartnerEditTDS();

            TDBTransaction Transaction = new TDBTransaction();
            TDataBase      db          = DBAccess.Connect("GetPartnerContactLogData", ADataBase);

            db.ReadTransaction(ref Transaction,
                               delegate
            {
                ReturnDS.Merge(PContactLogAccess.LoadViaPPartnerPPartnerContact(APartnerKey, Transaction));
                ReturnDS.Merge(PPartnerContactAccess.LoadViaPPartner(APartnerKey, Transaction));

                if ((ReturnDS.PContactLog != null) && (ReturnDS.PContactLog.Count > 0))
                {
                    foreach (PContactLogRow Row in ReturnDS.PContactLog.Rows)
                    {
                        ReturnDS.Merge(PPartnerContactAttributeAccess.LoadViaPContactLog(Row.ContactLogId, Transaction));
                    }
                }
            });

            return(ReturnDS);
        }
Beispiel #12
0
        public static PartnerEditTDS GetPartnerContactLogData(long APartnerKey)
        {
            PartnerEditTDS ReturnDS = new PartnerEditTDS();

            TDBTransaction Transaction = null;

            DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted,
                                                                      TEnforceIsolationLevel.eilMinimum, ref Transaction,
                                                                      delegate
            {
                ReturnDS.Merge(PContactLogAccess.LoadViaPPartnerPPartnerContact(APartnerKey, Transaction));
                ReturnDS.Merge(PPartnerContactAccess.LoadViaPPartner(APartnerKey, Transaction));

                if ((ReturnDS.PContactLog != null) && (ReturnDS.PContactLog.Count > 0))
                {
                    foreach (PContactLogRow Row in ReturnDS.PContactLog.Rows)
                    {
                        ReturnDS.Merge(PPartnerContactAttributeAccess.LoadViaPContactLog(Row.ContactLogId, Transaction));
                    }
                }
            });

            return(ReturnDS);
        }
Beispiel #13
0
        public static PContactLogTable FindContacts(string AContactor,
                                                    DateTime?AContactDate,
                                                    string ACommentContains,
                                                    string AMethodOfContact,
                                                    string AModuleID,
                                                    string AMailingCode)
        {
            Boolean          NewTransaction;
            PContactLogTable contacts = new PContactLogTable();

            TDBTransaction WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.ReadCommitted,
                                                                                                TEnforceIsolationLevel.eilMinimum, out NewTransaction);

            try
            {
                PContactLogTable TempTable   = new PContactLogTable();
                PContactLogRow   TemplateRow = TempTable.NewRowTyped(false);

                if (AContactor.Length > 0)
                {
                    TemplateRow.Contactor = AContactor;
                }

                if (AContactDate.HasValue)
                {
                    TemplateRow.ContactDate = new DateTime(AContactDate.Value.Year, AContactDate.Value.Month, AContactDate.Value.Day);
                }

                if (AMethodOfContact.Length > 0)
                {
                    TemplateRow.ContactCode = AMethodOfContact;
                }

                if (AModuleID.Length > 0)
                {
                    TemplateRow.ModuleId = AModuleID;
                }

                if (AMailingCode.Length > 0)
                {
                    TemplateRow.MailingCode = AMailingCode;
                }

                contacts = PContactLogAccess.LoadUsingTemplate(TemplateRow, WriteTransaction);

                Int32 Counter = 0;

                while (Counter < contacts.Rows.Count)
                {
                    if ((ACommentContains.Length > 0) && !StringHelper.ContainsI(contacts[Counter].ContactComment, ACommentContains))
                    {
                        contacts.Rows.RemoveAt(Counter);
                    }
                    else
                    {
                        Counter++;
                    }
                }
            }
            catch (Exception e)
            {
                TLogging.Log(e.Message);
                TLogging.Log(e.StackTrace);
            }

            if (NewTransaction)
            {
                DBAccess.GDBAccessObj.RollbackTransaction();
            }

            return(contacts);
        }
Beispiel #14
0
        public static void AddContactLog(List <Int64> APartnerKeys,
                                         DateTime AContactDate,
                                         string AContactor,
                                         string AMethodOfContact,
                                         string AComment,
                                         string AModuleID,
                                         string AMailingCode)
        {
            Boolean NewTransaction;

            TDBTransaction WriteTransaction = DBAccess.GDBAccessObj.GetNewOrExistingTransaction(IsolationLevel.Serializable,
                                                                                                TEnforceIsolationLevel.eilMinimum, out NewTransaction);

            try
            {
                PContactLogTable contacts = new PContactLogTable();
                PContactLogRow   contact  = contacts.NewRowTyped();
                contact.ContactLogId = DBAccess.GDBAccessObj.GetNextSequenceValue("seq_contact", WriteTransaction);
                contact.ContactDate  = new DateTime(AContactDate.Year, AContactDate.Month, AContactDate.Day);
                //contact.ContactTime = AContactDate.Hour * 60 + AContactDate.Minute;
                contact.ContactCode    = AMethodOfContact;
                contact.ContactComment = AComment;
                contact.ModuleId       = AModuleID;
                contact.Contactor      = AContactor;
                contact.UserId         = UserInfo.GUserInfo.UserID;
                contacts.Rows.Add(contact);

                if (AMailingCode.Length > 0)
                {
                    contact.MailingCode = AMailingCode;
                }

                // TODO: restrictions implemented via p_restricted_l or s_user_id_c

                PPartnerContactTable partnerContacts = new PPartnerContactTable();
                APartnerKeys.ForEach(partnerKey =>
                {
                    PPartnerContactRow partnerContact = partnerContacts.NewRowTyped();
                    partnerContact.ContactLogId       = contact.ContactLogId;
                    partnerContact.PartnerKey         = partnerKey;
                    partnerContacts.Rows.Add(partnerContact);
                });

                PContactLogAccess.SubmitChanges(contacts, WriteTransaction);
                PPartnerContactAccess.SubmitChanges(partnerContacts, WriteTransaction);

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.CommitTransaction();
                }
            }
            catch (Exception Exc)
            {
                TLogging.Log("An Exception occured during the adding of a Contact:" + Environment.NewLine + Exc.ToString());

                if (NewTransaction)
                {
                    DBAccess.GDBAccessObj.RollbackTransaction();
                }

                throw;
            }
        }