/// <summary> /// Given the DataSet of a Report query this will check if there currently last known entry, /// has the consent to use this data in this report, if not it will be replaced by a empty string /// </summary> public static DataTable PartnerRemoveUnconsentReportData(DataTable PartnerTable, string CheckConsentCode) { // check if its allowed that this data type is showed in report foreach (DataRow Row in PartnerTable.Rows) { Int64 PartnerKey = Int64.Parse(Row["PartnerKey"].ToString()); DataConsentTDS LastEntry; // Note: this could be much simplyfied, and i mean a lot, llike cobining it to one sql // but for now, we keep it by using already present functions. // address if ( PartnerTable.Columns.Contains("p_street_name_c") || PartnerTable.Columns.Contains("p_city_c") || PartnerTable.Columns.Contains("p_postal_code_c") || PartnerTable.Columns.Contains("p_country_code_c") ) { LastEntry = TDataHistoryWebConnector.LastKnownEntry(PartnerKey, "address"); if (LastEntry.PConsentHistory.Count == 0 || !LastEntry.PConsentHistory[0].AllowedPurposes.Split(',').ToList().Contains(CheckConsentCode)) { if (PartnerTable.Columns.Contains("p_street_name_c")) { Row["p_street_name_c"] = ""; } if (PartnerTable.Columns.Contains("p_city_c")) { Row["p_city_c"] = ""; } if (PartnerTable.Columns.Contains("p_postal_code_c")) { Row["p_postal_code_c"] = ""; } if (PartnerTable.Columns.Contains("p_country_code_c")) { Row["p_country_code_c"] = ""; } } } // phone mobile if (PartnerTable.Columns.Contains("Mobile")) { LastEntry = TDataHistoryWebConnector.LastKnownEntry(PartnerKey, "phone mobile"); if (LastEntry.PConsentHistory.Count == 0 || !LastEntry.PConsentHistory[0].AllowedPurposes.Split(',').ToList().Contains(CheckConsentCode)) { Row["Mobile"] = ""; } } // phone landline if (PartnerTable.Columns.Contains("Phone")) { LastEntry = TDataHistoryWebConnector.LastKnownEntry(PartnerKey, "phone landline"); if (LastEntry.PConsentHistory.Count == 0 || !LastEntry.PConsentHistory[0].AllowedPurposes.Split(',').ToList().Contains(CheckConsentCode)) { Row["Phone"] = ""; } } // email address if (PartnerTable.Columns.Contains("EMail")) { LastEntry = TDataHistoryWebConnector.LastKnownEntry(PartnerKey, "email address"); if (LastEntry.PConsentHistory.Count == 0 || !LastEntry.PConsentHistory[0].AllowedPurposes.Split(',').ToList().Contains(CheckConsentCode)) { Row["EMail"] = ""; } } } return(PartnerTable); }
/// <summary> /// generate the partners from a text file that was generated with Benerator /// </summary> /// <param name="AInputBeneratorFile"></param> public static void GenerateFamilyPartners(string AInputBeneratorFile) { TDataBase db = DBAccess.Connect("GenerateFamilyPartners"); TDBTransaction Transaction = db.BeginTransaction(IsolationLevel.ReadCommitted); // get a list of banks (all class BANK) string sqlGetBankPartnerKeys = "SELECT p_partner_key_n FROM PUB_p_bank"; DataTable BankKeys = db.SelectDT(sqlGetBankPartnerKeys, "keys", Transaction); Transaction.Rollback(); PartnerEditTDS MainDS = new PartnerEditTDS(); // AlanP: May 2016 - We may no longer need the UTF8 because the method now automatically discovers the encoding even with no BOM XmlDocument doc = TCsv2Xml.ParseCSVFile2Xml(AInputBeneratorFile, ",", Encoding.UTF8); XmlNode RecordNode = doc.FirstChild.NextSibling.FirstChild; while (RecordNode != null) { string familySituation = TXMLParser.GetAttribute(RecordNode, "familySituation"); PFamilyRow familyRecord = null; PPartnerRow FamilyPartnerRow = null; if (familySituation == "singleMan") { familyRecord = SampleDataWorkers.GenerateFamilyRecord(RecordNode, "Male", MainDS); SampleDataWorkers.GeneratePersonRecord(RecordNode, familyRecord, "Male", MainDS); } else if (familySituation == "singleWoman") { familyRecord = SampleDataWorkers.GenerateFamilyRecord(RecordNode, "Female", MainDS); SampleDataWorkers.GeneratePersonRecord(RecordNode, familyRecord, "Female", MainDS); } else if (familySituation == "family") { familyRecord = SampleDataWorkers.GenerateFamilyRecord(RecordNode, "Male", MainDS); SampleDataWorkers.GeneratePersonRecord(RecordNode, familyRecord, "Male", MainDS); SampleDataWorkers.GeneratePersonRecord(RecordNode, familyRecord, "Female", MainDS); int NumberOfChildren = Convert.ToInt32(TXMLParser.GetAttribute(RecordNode, "numberOfChildren")); if (NumberOfChildren > 0) { FamilyPartnerRow = (PPartnerRow)MainDS.PPartner.Rows.Find(familyRecord.PartnerKey); FamilyPartnerRow.AddresseeTypeCode = MPartnerConstants.ADDRESSEETYPE_FAMILY; } } FamilyPartnerRow = (PPartnerRow)MainDS.PPartner.Rows.Find(familyRecord.PartnerKey); FamilyPartnerRow.ReceiptEachGift = false; FamilyPartnerRow.ReceiptLetterFrequency = "Annual"; SampleDataWorkers.GenerateAddressForFamily(RecordNode, familyRecord, MainDS); SampleDataWorkers.GenerateBankDetails(RecordNode, familyRecord, MainDS, BankKeys); if (MainDS.PFamily.Rows.Count % 100 == 0) { TLogging.Log("created donor " + MainDS.PFamily.Rows.Count.ToString() + " " + familyRecord.FamilyName); } RecordNode = RecordNode.NextSibling; } // we do not save person records for normal family partners MainDS.PPerson.Clear(); // need to clear all partner records of the PERSON partners as well DataView PersonPartners = new DataView(MainDS.PPartner); PersonPartners.RowFilter = string.Format("{0} = '{1}'", PPartnerTable.GetPartnerClassDBName(), MPartnerConstants.PARTNERCLASS_PERSON); DataView PartnerLocations = new DataView(MainDS.PPartnerLocation); foreach (DataRowView rv in PersonPartners) { PPartnerRow partnerRow = (PPartnerRow)rv.Row; PartnerLocations.RowFilter = string.Format("{0} = {1}", PPartnerLocationTable.GetPartnerKeyDBName(), partnerRow.PartnerKey); PartnerLocations[0].Row.Delete(); partnerRow.Delete(); } // MainDS.ThrowAwayAfterSubmitChanges = true; PartnerEditTDSAccess.SubmitChanges(MainDS); RecordNode = doc.FirstChild.NextSibling.FirstChild; DataView FamilyPartners = new DataView(MainDS.PFamily); foreach (DataRowView rv in FamilyPartners) { PFamilyRow partnerRow = (PFamilyRow)rv.Row; string familySituation = TXMLParser.GetAttribute(RecordNode, "familySituation"); string setmail; if (familySituation == "singleWoman") { setmail = TXMLParser.GetAttribute(RecordNode, "FemaleEmail"); } else { setmail = TXMLParser.GetAttribute(RecordNode, "MaleEmail"); } string allowed_contents = TXMLParser.GetAttribute(RecordNode, "AllowedConsents"); string channel_contents = TXMLParser.GetAttribute(RecordNode, "ConsentChannel"); DataHistoryChange change = new DataHistoryChange { PartnerKey = partnerRow.PartnerKey, Type = "email address", Value = setmail, ConsentDate = DateTime.Now, ChannelCode = channel_contents, Permissions = allowed_contents }; // Build verification string List <string> Changes = new List <string>(); List <string> Expected = new List <string>() { "email address" }; Changes.Add(JsonConvert.SerializeObject(change)); // RegisterChanges () bool success = TDataHistoryWebConnector.RegisterChanges(Changes, Expected); if (!success) { throw new Exception("saving conents failed"); } RecordNode = RecordNode.NextSibling; } TLogging.Log("after saving donors"); }