/// <summary> /// Retrieves the gender and age of one person. /// </summary> /// <param name="APartnerKey">Partner key of the person to examine</param> /// <param name="AStartDate">Start date of the conference. The age is calculated at the start date</param> /// <param name="AGender">Gender of the current person</param> /// <param name="AAge">Age of the current person</param> /// <param name="ASituation">The current report situation</param> /// <returns></returns> private bool GetGenderAndAge(long APartnerKey, DateTime AStartDate, out char AGender, out int AAge, ref TRptSituation ASituation) { bool ReturnValue = false; AGender = ' '; AAge = 0; PPersonTable PersonTable; PersonTable = PPersonAccess.LoadByPrimaryKey(APartnerKey, ASituation.GetDatabaseConnection().Transaction); if (PersonTable.Rows.Count > 0) { PPersonRow PersonRow = (PPersonRow)PersonTable.Rows[0]; AGender = PersonRow.Gender.ToCharArray()[0]; if (!PersonRow.IsDateOfBirthNull()) { AAge = Calculations.CalculateAge(PersonRow.DateOfBirth.Value, AStartDate); } ReturnValue = true; } return(ReturnValue); }
/// create a new person public static PPersonRow CreateNewPerson(PartnerEditTDS AMainDS, Int64 AFamilyKey, Int32 ALocationKey, string AFirstName, string ATitle, int AFamilyID) { PPartnerRow PartnerRow = CreateNewPartner(AMainDS); PartnerRow.PartnerClass = MPartnerConstants.PARTNERCLASS_PERSON; PartnerRow.PartnerShortName = AFamilyKey.ToString() + ", " + AFirstName + ", " + ATitle; PPersonRow PersonRow = AMainDS.PPerson.NewRowTyped(); PersonRow.PartnerKey = PartnerRow.PartnerKey; PersonRow.FamilyKey = AFamilyKey; PersonRow.FamilyName = AFamilyKey.ToString(); PersonRow.FirstName = AFirstName; PersonRow.FamilyId = AFamilyID; PersonRow.Title = ATitle; AMainDS.PPerson.Rows.Add(PersonRow); PPartnerLocationRow PartnerLocationRow = AMainDS.PPartnerLocation.NewRowTyped(); PartnerLocationRow.SiteKey = DomainManager.GSiteKey; PartnerLocationRow.PartnerKey = PartnerRow.PartnerKey; PartnerLocationRow.LocationKey = ALocationKey; PartnerLocationRow.TelephoneNumber = PersonRow.PartnerKey.ToString(); AMainDS.PPartnerLocation.Rows.Add(PartnerLocationRow); return(PersonRow); }
private void ShowEmergencyContacts(object sender, EventArgs e) { string contactFor = string.Empty; string primaryContact = Catalog.GetString("PRIMARY EMERGENCY CONTACT") + Environment.NewLine + Environment.NewLine; string secondaryContact = Catalog.GetString("SECONDARY EMERGENCY CONTACT") + Environment.NewLine + Environment.NewLine; Int64 primaryContactKey = 0; Int64 secondaryContactKey = 0; if ((FMainDS.PPerson != null) && (FMainDS.PPerson.Rows.Count > 0)) { PPersonRow row = (PPersonRow)FMainDS.PPerson.Rows[0]; contactFor = String.Format(Catalog.GetString("Emergency Contact Information For: {0} {1} {2} [{3:0000000000}]"), row.Title, row.FirstName, row.FamilyName, row.PartnerKey); FPetraUtilsObject.GetForm().Cursor = Cursors.WaitCursor; PPartnerRelationshipTable relationshipTable = TRemote.MPartner.Partner.WebConnectors.GetPartnerRelationships(row.PartnerKey); FPetraUtilsObject.GetForm().Cursor = Cursors.Default; for (int i = 0; i < relationshipTable.Rows.Count; i++) { PPartnerRelationshipRow relationshipRow = (PPartnerRelationshipRow)relationshipTable.Rows[i]; if (string.Compare(relationshipRow.RelationName, "EMER-1", true) == 0) { ParseEmergencyContactData(ref primaryContact, relationshipRow); primaryContactKey = relationshipRow.PartnerKey; } else if (string.Compare(relationshipRow.RelationName, "EMER-2", true) == 0) { ParseEmergencyContactData(ref secondaryContact, relationshipRow); secondaryContactKey = relationshipRow.PartnerKey; } } } if (primaryContactKey == 0) { primaryContact += Catalog.GetString("No primary contact"); } if (secondaryContactKey == 0) { secondaryContact += Catalog.GetString("No secondary contact"); } if ((primaryContactKey != 0) || (secondaryContactKey != 0)) { // Show the emergency contacts dialog and pass it the inofrmation we have found TFrmEmergencyContactsDialog dlg = new TFrmEmergencyContactsDialog(FPetraUtilsObject.GetCallerForm()); dlg.SetParameters(contactFor, primaryContact, secondaryContact, primaryContactKey, secondaryContactKey); dlg.Show(); } else { MessageBox.Show(Catalog.GetString("There is no emergency contact information for this person."), Catalog.GetString("Emergency Contacts"), MessageBoxButtons.OK, MessageBoxIcon.Information); } }
/// <summary> /// Create a Partner and a Person having this FamilyKey, living at this address. /// </summary> /// <param name="AFamilyKey"></param> /// <param name="ALocationKey"></param> /// <param name="ANode"></param> /// <param name="AMainDS"></param> /// <param name="ATransaction"></param> private static Int64 CreateNewPerson(Int64 AFamilyKey, int ALocationKey, XmlNode ANode, ref PartnerImportExportTDS AMainDS, TDBTransaction ATransaction) { AMainDS.PFamily.DefaultView.RowFilter = String.Format("{0}={1}", PFamilyTable.GetPartnerKeyDBName(), AFamilyKey); PFamilyRow FamilyRow = (PFamilyRow)AMainDS.PFamily.DefaultView[0].Row; AMainDS.PPartner.DefaultView.RowFilter = String.Format("{0}={1}", PPartnerTable.GetPartnerKeyDBName(), AFamilyKey); PPartnerRow PartnerRow = (PPartnerRow)AMainDS.PPartner.DefaultView[0].Row; PPartnerRow newPartner = AMainDS.PPartner.NewRowTyped(); AMainDS.PPartner.Rows.Add(newPartner); newPartner.PartnerKey = (AMainDS.PPartner.Rows.Count + 1) * -1; newPartner.PartnerClass = MPartnerConstants.PARTNERCLASS_PERSON; newPartner.AddresseeTypeCode = PartnerRow.AddresseeTypeCode; newPartner.PartnerShortName = PartnerRow.PartnerShortName; newPartner.LanguageCode = PartnerRow.LanguageCode; newPartner.Comment = TXMLParser.GetAttribute(ANode, MPartnerConstants.PARTNERIMPORT_NOTES); newPartner.AcquisitionCode = PartnerRow.AcquisitionCode; newPartner.StatusCode = MPartnerConstants.PARTNERSTATUS_ACTIVE; PPersonRow newPerson = AMainDS.PPerson.NewRowTyped(); AMainDS.PPerson.Rows.Add(newPerson); newPerson.PartnerKey = newPartner.PartnerKey; newPerson.FamilyKey = AFamilyKey; // When this record is imported, newPerson.FamilyId must be unique for this family! newPerson.FirstName = FamilyRow.FirstName; newPerson.FamilyName = FamilyRow.FamilyName; newPerson.Title = FamilyRow.Title; newPerson.Gender = GetGenderCode(ANode); newPerson.MaritalStatus = FamilyRow.MaritalStatus; PPartnerLocationRow newPartnerLocation = AMainDS.PPartnerLocation.NewRowTyped(); AMainDS.PPartnerLocation.Rows.Add(newPartnerLocation); newPartnerLocation.LocationKey = ALocationKey; // This person lives at the same address as the family. newPartnerLocation.SiteKey = 0; newPartnerLocation.PartnerKey = newPartner.PartnerKey; newPartnerLocation.DateEffective = DateTime.Now.Date; newPartnerLocation.LocationType = MPartnerConstants.LOCATIONTYPE_HOME; newPartnerLocation.SendMail = true; newPartnerLocation["p_email_address_c"] = TXMLParser.GetAttribute(ANode, MPartnerConstants.PARTNERIMPORT_EMAIL); // Important: Do not use 'newPartnerLocation.EmailAddress' as this Column will get removed once Contact Details conversion is finished! newPartnerLocation["p_telephone_number_c"] = TXMLParser.GetAttribute(ANode, MPartnerConstants.PARTNERIMPORT_PHONE); // Important: Do not use 'newPartnerLocation.TelephoneNumber' as this Column will get removed once Contact Details conversion is finished! newPartnerLocation["p_mobile_number_c"] = TXMLParser.GetAttribute(ANode, MPartnerConstants.PARTNERIMPORT_MOBILEPHONE); // Important: Do not use 'newPartnerLocation.MobileNumber' as this Column will get removed once Contact Details conversion is finished! AddVerificationResult("Person Record Created.", TResultSeverity.Resv_Status); return(newPerson.PartnerKey); }
private void ValidateDataManual(PPersonRow ARow) { TVerificationResultCollection VerificationResultCollection = FPetraUtilsObject.VerificationResultCollection; TSharedPartnerValidation_Partner.ValidatePartnerPersonManual(this, ARow, @TDataCache.GetCacheableDataTableFromCache, ref VerificationResultCollection, FValidationControlsDict); }
private void ValidateDataManual(PPersonRow ARow) { TVerificationResultCollection VerificationResultCollection = FPetraUtilsObject.VerificationResultCollection; TSharedPartnerValidation_Partner.ValidatePartnerPersonManual(this, ARow, @TDataCache.GetCacheableDataTableFromCache, ref VerificationResultCollection, FValidationControlsDict); }
private static PartnerDetails GetRecipient(Int64 APartnerKey) { if (RecipientList.ContainsKey(APartnerKey)) { return(RecipientList[APartnerKey]); } PartnerDetails Ret = new PartnerDetails(); PPartnerTable PartnerTbl = PPartnerAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (PartnerTbl.Rows.Count > 0) { PPartnerRow PartnerRow = PartnerTbl[0]; Ret.LastName = PartnerRow.PartnerShortName; if (PartnerRow.PartnerClass == "PERSON") { PPersonTable PersonTbl = PPersonAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (PersonTbl.Rows.Count > 0) { PPersonRow PersonRow = PersonTbl[0]; Ret.FirstName = PersonRow.FirstName; Ret.LastName = PersonRow.FamilyName; Ret.Class = "PERSON"; } } if (PartnerRow.PartnerClass == "FAMILY") { PFamilyTable FamilyTbl = PFamilyAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (FamilyTbl.Rows.Count > 0) { PFamilyRow FamilyRow = FamilyTbl[0]; Ret.FirstName = FamilyRow.FirstName; Ret.LastName = FamilyRow.FamilyName; Ret.Class = "FAMILY"; } } PPartnerLocationRow LocationRow; TLocationPK LocationKey = ServerCalculations.DetermineBestAddress(APartnerKey, out LocationRow); if (LocationKey.LocationKey != -1) { Ret.Email = LocationRow.EmailAddress; } } RecipientList.Add(APartnerKey, Ret); return(Ret); }
/// <summary> /// Adds the OMer field from the person and family record of the partner /// to the data table if it is not already there. /// </summary> /// <param name="APartnerKey"></param> /// <param name="AFieldsTable"></param> /// <returns></returns> private static bool GetReceivingFieldFromGiftDestination(long APartnerKey, ref DataTable AFieldsTable) { TDBTransaction ReadTransaction; Boolean NewTransaction = false; TLogging.LogAtLevel(9, "TConferenceOptions.GetReceivingFieldFromGiftDestination called!"); TDataBase db = DBAccess.Connect("GetReceivingFieldFromGiftDestination"); ReadTransaction = db.GetNewOrExistingTransaction(IsolationLevel.RepeatableRead, out NewTransaction); try { PPersonTable PersonTable; PPartnerGiftDestinationTable GiftDestinationTable; long FamilyKey = APartnerKey; PersonTable = PPersonAccess.LoadByPrimaryKey(APartnerKey, ReadTransaction); if (PersonTable.Rows.Count > 0) { PPersonRow PersonRow = (PPersonRow)PersonTable[0]; FamilyKey = PersonRow.FamilyKey; } GiftDestinationTable = PPartnerGiftDestinationAccess.LoadViaPPartner(FamilyKey, ReadTransaction); if (GiftDestinationTable.Rows.Count > 0) { foreach (PPartnerGiftDestinationRow Row in GiftDestinationTable.Rows) { // check if the gift destination is currently active if ((Row.DateEffective <= DateTime.Today) && (Row.IsDateExpiresNull() || ((Row.DateExpires >= DateTime.Today) && (Row.DateExpires != Row.DateEffective)))) { AddFieldToTable(Row.FieldKey, ref AFieldsTable, ref ReadTransaction); } } } } finally { if (NewTransaction) { ReadTransaction.Commit(); TLogging.LogAtLevel(7, "TConferenceOptions.GetReceivingFieldFromPartnerTable: committed own transaction."); } } return(true); }
/// <summary> /// Triggered after a change to a DataRow in the PPerson DataTable in the *screen's main DataSet*. /// </summary> /// <param name="APersonRow">PPerson DataRow containing the changed data.</param> /// <returns>void</returns> public void FMainDS_PPerson_ColumnChanged(PPersonRow APersonRow) { string MaritalStatusDesc = PartnerCodeHelper.GetMaritalStatusDescription( @TDataCache.GetCacheableDataTableFromCache, APersonRow.MaritalStatus); if (MaritalStatusDesc != String.Empty) { MaritalStatusDesc = " - " + MaritalStatusDesc; } txtGender.Text = APersonRow.Gender; txtMaritalStatus.Text = APersonRow.MaritalStatus + MaritalStatusDesc; dtpDateOfBirth.Date = APersonRow.DateOfBirth; }
private static Int64 CreatePerson(ref PartnerEditTDS AMainDS, Int64 AFamilyKey, TApplicationFormData APartnerData) { PPartnerRow newPartner = AMainDS.PPartner.NewRowTyped(); Int64 SiteKey = DomainManager.GSiteKey; // get a new partner key Int64 newPartnerKey = -1; do { newPartnerKey = TNewPartnerKey.GetNewPartnerKey(SiteKey); TNewPartnerKey.SubmitNewPartnerKey(SiteKey, newPartnerKey, ref newPartnerKey); newPartner.PartnerKey = newPartnerKey; } while (newPartnerKey == -1); // TODO: new status UNAPPROVED? newPartner.StatusCode = MPartnerConstants.PARTNERSTATUS_ACTIVE; AMainDS.PPartner.Rows.Add(newPartner); PPersonRow newPerson = AMainDS.PPerson.NewRowTyped(); newPerson.PartnerKey = newPartner.PartnerKey; newPerson.FamilyKey = AFamilyKey; newPerson.FirstName = APartnerData.firstname; newPerson.FamilyName = APartnerData.lastname; newPerson.Gender = APartnerData.gender; newPerson.DateOfBirth = APartnerData.dateofbirth; newPerson.Title = APartnerData.title; AMainDS.PPerson.Rows.Add(newPerson); newPartner.PartnerClass = MPartnerConstants.PARTNERCLASS_PERSON; newPartner.AddresseeTypeCode = MPartnerConstants.PARTNERCLASS_FAMILY; newPartner.PartnerShortName = Calculations.DeterminePartnerShortName(newPerson.FamilyName, newPerson.Title, newPerson.FirstName); return(newPartnerKey); }
/// <summary> /// Triggered after a change to a DataRow in the PPerson DataTable in the *screen's main DataSet*. /// </summary> /// <param name="APersonRow">PPerson DataRow containing the changed data.</param> /// <returns>void</returns> public void FMainDS_PPerson_ColumnChanged(PPersonRow APersonRow) { string MaritalStatusDesc = PartnerCodeHelper.GetMaritalStatusDescription( @TDataCache.GetCacheableDataTableFromCache, APersonRow.MaritalStatus); if (MaritalStatusDesc != String.Empty) { MaritalStatusDesc = " - " + MaritalStatusDesc; } txtGender.Text = APersonRow.Gender; txtMaritalStatus.Text = APersonRow.MaritalStatus + MaritalStatusDesc; dtpDateOfBirth.Date = APersonRow.DateOfBirth; }
/// <summary> /// create PPartnerLocation records for the FAMILY partner, and all the PERSON records of this family /// </summary> public static void GenerateAddressForFamily(XmlNode ACurrentNode, PFamilyRow AFamilyRow, PartnerEditTDS AMainDS) { PLocationRow locationRow = AMainDS.PLocation.NewRowTyped(); locationRow.SiteKey = 0; // DomainManager.GSiteKey; locationRow.LocationKey = (AMainDS.PLocation.Count + 1) * -1; locationRow.StreetName = TXMLParser.GetAttribute(ACurrentNode, "Addr2"); locationRow.PostalCode = TXMLParser.GetAttribute(ACurrentNode, "PostCode"); locationRow.City = TXMLParser.GetAttribute(ACurrentNode, "City"); locationRow.County = TXMLParser.GetAttribute(ACurrentNode, "Province"); locationRow.CountryCode = TXMLParser.GetAttribute(ACurrentNode, "CountryCode"); AMainDS.PLocation.Rows.Add(locationRow); PPartnerLocationRow familyLocationRow = AMainDS.PPartnerLocation.NewRowTyped(); familyLocationRow.PartnerKey = AFamilyRow.PartnerKey; familyLocationRow.LocationKey = locationRow.LocationKey; familyLocationRow.SiteKey = locationRow.SiteKey; familyLocationRow.LocationType = MPartnerConstants.LOCATIONTYPE_HOME; familyLocationRow.SendMail = true; AMainDS.PPartnerLocation.Rows.Add(familyLocationRow); DataView FamilyView = new DataView(AMainDS.PPerson); FamilyView.RowFilter = PPersonTable.GetFamilyKeyDBName() + " = " + AFamilyRow.PartnerKey.ToString(); FamilyView.Sort = PPersonTable.GetFamilyIdDBName(); // for each person, also create a location record for (int countPerson = 0; countPerson < FamilyView.Count; countPerson++) { PPersonRow personRow = (PPersonRow)FamilyView[countPerson].Row; PPartnerLocationRow personLocationRow = AMainDS.PPartnerLocation.NewRowTyped(); personLocationRow.PartnerKey = personRow.PartnerKey; personLocationRow.LocationKey = familyLocationRow.LocationKey; personLocationRow.SiteKey = familyLocationRow.SiteKey; personLocationRow.LocationType = MPartnerConstants.LOCATIONTYPE_HOME; personLocationRow.SendMail = true; AMainDS.PPartnerLocation.Rows.Add(personLocationRow); string prefix = "Male"; if (countPerson == 1) { prefix = "Female"; } else if (countPerson > 1) { prefix = "Child" + (countPerson - 1).ToString(); } personLocationRow.EmailAddress = TXMLParser.GetAttribute(ACurrentNode, prefix + "Email"); // set email of first person for whole family if (countPerson == 0) { familyLocationRow.EmailAddress = personLocationRow.EmailAddress; } } }
/// <summary> /// This empty Method is needed so that the 'SAVEDATA' section of the template for the auto-generated class can be filled in. /// It is a HACK, since this screen is read-only and wouldn't need any saving code at all... /// FIXME in the WinForms generator/devise another template for read-only screens... /// </summary> /// <param name="ARow">Not evaluated.</param> /// <returns>void</returns> private void GetDataFromControlsManual(PPersonRow ARow) { }
private static PartnerDetails GetDonor(Int64 APartnerKey) { if (DonorList.ContainsKey(APartnerKey)) { return(DonorList[APartnerKey]); } PartnerDetails Ret = new PartnerDetails(); PPartnerTable PartnerTbl = PPartnerAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (PartnerTbl.Rows.Count > 0) { PPartnerRow PartnerRow = PartnerTbl[0]; Ret.LastName = PartnerRow.PartnerShortName; Ret.Anonymous = PartnerRow.AnonymousDonor; if (PartnerRow.PartnerClass == "PERSON") { PPersonTable PersonTbl = PPersonAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (PersonTbl.Rows.Count > 0) { PPersonRow PersonRow = PersonTbl[0]; Ret.FirstName = PersonRow.FirstName; Ret.LastName = PersonRow.FamilyName; Ret.Class = "PERSON"; } } if (PartnerRow.PartnerClass == "FAMILY") { PFamilyTable FamilyTbl = PFamilyAccess.LoadByPrimaryKey(APartnerKey, FTransaction); if (FamilyTbl.Rows.Count > 0) { PFamilyRow FamilyRow = FamilyTbl[0]; Ret.FirstName = FamilyRow.FirstName; Ret.LastName = FamilyRow.FamilyName; Ret.Class = "FAMILY"; } } PPartnerLocationRow PartnerLocationRow; TLocationPK LocationKey = ServerCalculations.DetermineBestAddress(APartnerKey, out PartnerLocationRow); if (LocationKey.LocationKey != -1) { Ret.Email = PartnerLocationRow.EmailAddress; Ret.Telephone = PartnerLocationRow.TelephoneNumber; PLocationTable LocationTbl = PLocationAccess.LoadByPrimaryKey(PartnerLocationRow.SiteKey, PartnerLocationRow.LocationKey, FTransaction); if (LocationTbl.Rows.Count > 0) { PLocationRow LocationRow = LocationTbl[0]; Ret.Address = Calculations.DetermineLocationString(LocationRow, Calculations.TPartnerLocationFormatEnum.plfCommaSeparated); } } } DonorList.Add(APartnerKey, Ret); return(Ret); }
private static void GenerateCommitmentRecord( XmlNode ACurrentNode, PFamilyRow AFamilyRow, PartnerEditTDS AMainDS, PersonnelTDS APersonnelDS, DataTable AFieldKeys) { DataView FamilyView = new DataView(AMainDS.PPerson); FamilyView.RowFilter = PPersonTable.GetFamilyKeyDBName() + " = " + AFamilyRow.PartnerKey.ToString(); FamilyView.Sort = PPersonTable.GetFamilyIdDBName(); PPersonRow firstPerson = (PPersonRow)FamilyView[0].Row; int FieldID = Convert.ToInt32(TXMLParser.GetAttribute(ACurrentNode, "fieldCommitment")) % AFieldKeys.Rows.Count; long FieldPartnerKey = Convert.ToInt64(AFieldKeys.Rows[FieldID].ItemArray[0]); PPartnerGiftDestinationRow giftDestination = AMainDS.PPartnerGiftDestination.NewRowTyped(); if (NextKeyForGiftDestination == -1) { NextKeyForGiftDestination = TPartnerDataReaderWebConnector.GetNewKeyForPartnerGiftDestination(); } else { NextKeyForGiftDestination++; } giftDestination.Key = NextKeyForGiftDestination; giftDestination.FieldKey = FieldPartnerKey; giftDestination.PartnerKey = AFamilyRow.PartnerKey; giftDestination.PartnerClass = MPartnerConstants.PARTNERCLASS_FAMILY; giftDestination.DateEffective = Convert.ToDateTime(TXMLParser.GetAttribute(ACurrentNode, "startDateCommitment")); PmStaffDataRow staffData = APersonnelDS.PmStaffData.NewRowTyped(); staffData.SiteKey = DomainManager.GSiteKey; staffData.Key = (APersonnelDS.PmStaffData.Count + 1) * -1; staffData.PartnerKey = firstPerson.PartnerKey; staffData.ReceivingField = FieldPartnerKey; // TODO: could add foreign nationals staffData.HomeOffice = DomainManager.GSiteKey; staffData.OfficeRecruitedBy = DomainManager.GSiteKey; staffData.StartOfCommitment = Convert.ToDateTime(TXMLParser.GetAttribute(ACurrentNode, "startDateCommitment")); int LengthCommitment = Convert.ToInt32(TXMLParser.GetAttribute(ACurrentNode, "lengthCommitment")); staffData.StatusCode = "LONG-TERMER"; if (LengthCommitment > 0) { string LengthCommitmentUnit = TXMLParser.GetAttribute(ACurrentNode, "lengthCommitmentUnit"); if (LengthCommitmentUnit == "week") { staffData.StatusCode = "SHORT-TERMER"; staffData.EndOfCommitment = staffData.StartOfCommitment.AddDays(7 * LengthCommitment); } else if (LengthCommitmentUnit == "month") { staffData.StatusCode = "SHORT-TERMER"; staffData.EndOfCommitment = staffData.StartOfCommitment.AddMonths(LengthCommitment); } else if (LengthCommitmentUnit == "year") { if (LengthCommitment < 3) { staffData.StatusCode = "WORKER"; } staffData.EndOfCommitment = staffData.StartOfCommitment.AddYears(LengthCommitment); } } APersonnelDS.PmStaffData.Rows.Add(staffData); giftDestination.DateExpires = staffData.EndOfCommitment; if (AMainDS.PPartnerGiftDestination == null) { AMainDS.PPartnerGiftDestination.Merge(new PPartnerGiftDestinationTable()); } AMainDS.PPartnerGiftDestination.Rows.Add(giftDestination); // TODO depending on start and end date of commitment, set EX-WORKER or no special type yet at all string SpecialType = MPartnerConstants.PARTNERTYPE_WORKER; if (!staffData.IsEndOfCommitmentNull() && (staffData.EndOfCommitment < DateTime.Today)) { SpecialType = MPartnerConstants.PARTNERTYPE_EX_WORKER; } if (SpecialType != string.Empty) { // create special type for family partner PPartnerTypeRow PartnerTypeRow = AMainDS.PPartnerType.NewRowTyped(); PartnerTypeRow.PartnerKey = AFamilyRow.PartnerKey; PartnerTypeRow.TypeCode = SpecialType; AMainDS.PPartnerType.Rows.Add(PartnerTypeRow); // set special type WORKER for the parents for (int countPerson = 0; countPerson < FamilyView.Count && countPerson < 2; countPerson++) { PPersonRow personRow = (PPersonRow)FamilyView[countPerson].Row; // create special type for the person partners PartnerTypeRow = AMainDS.PPartnerType.NewRowTyped(); PartnerTypeRow.PartnerKey = personRow.PartnerKey; PartnerTypeRow.TypeCode = SpecialType; AMainDS.PPartnerType.Rows.Add(PartnerTypeRow); } } }
/// <summary> /// generate a person record and update the associated family partner /// </summary> /// <param name="ACurrentNode"></param> /// <param name="AFamilyRow"></param> /// <param name="APrefix"></param> /// <param name="AMainDS"></param> public static void GeneratePersonRecord(XmlNode ACurrentNode, PFamilyRow AFamilyRow, string APrefix, PartnerEditTDS AMainDS) { PPersonRow PersonRow = AMainDS.PPerson.NewRowTyped(); PPartnerRow PartnerRow = AMainDS.PPartner.NewRowTyped(); if (NumberOfPartnerKeysReserved == 0) { NumberOfPartnerKeysReserved = 100; NextPartnerKey = TNewPartnerKey.ReservePartnerKeys(-1, ref NumberOfPartnerKeysReserved); } long PartnerKey = NextPartnerKey; NextPartnerKey++; NumberOfPartnerKeysReserved--; PartnerRow.PartnerKey = PartnerKey; PersonRow.PartnerKey = PartnerRow.PartnerKey; PersonRow.FamilyKey = AFamilyRow.PartnerKey; // create family id: count existing family members DataView FamilyView = new DataView(AMainDS.PPerson); FamilyView.RowFilter = PPersonTable.GetFamilyKeyDBName() + " = " + AFamilyRow.PartnerKey.ToString(); FamilyView.Sort = PPersonTable.GetFamilyIdDBName(); PersonRow.FamilyId = FamilyView.Count; PersonRow.FirstName = TXMLParser.GetAttribute(ACurrentNode, APrefix + "FirstName"); PersonRow.MiddleName1 = TXMLParser.GetAttribute(ACurrentNode, APrefix + "MiddleName"); PersonRow.FamilyName = AFamilyRow.FamilyName; if (FamilyView.Count == 1) { PartnerRow.PreviousName = TXMLParser.GetAttribute(ACurrentNode, APrefix + "FamilyName"); } PersonRow.Title = TXMLParser.GetAttribute(ACurrentNode, APrefix + "Title"); PartnerRow.PartnerShortName = Calculations.DeterminePartnerShortName( PersonRow.FamilyName, PersonRow.Title, PersonRow.FirstName); PartnerRow.PartnerClass = MPartnerConstants.PARTNERCLASS_PERSON; PartnerRow.StatusCode = MPartnerConstants.PARTNERSTATUS_ACTIVE; PersonRow.DateOfBirth = Convert.ToDateTime(TXMLParser.GetAttribute(ACurrentNode, APrefix + "DateOfBirth")); string gender = TXMLParser.GetAttribute(ACurrentNode, APrefix + "Gender"); if ((APrefix == "Male") || (gender == "MALE")) { PersonRow.Gender = MPartnerConstants.GENDER_MALE; PartnerRow.AddresseeTypeCode = MPartnerConstants.ADDRESSEETYPE_MALE; } else if ((APrefix == "Female") || (gender == "FEMALE")) { PersonRow.Gender = MPartnerConstants.GENDER_FEMALE; PartnerRow.AddresseeTypeCode = MPartnerConstants.ADDRESSEETYPE_FEMALE; } PPartnerRow FamilyPartnerRow = (PPartnerRow)AMainDS.PPartner.Rows.Find(AFamilyRow.PartnerKey); if (FamilyView.Count == 0) { FamilyPartnerRow.AddresseeTypeCode = PartnerRow.AddresseeTypeCode; } else if (FamilyView.Count == 1) { // this is a couple PersonRow.MaritalStatus = MPartnerConstants.MARITALSTATUS_MARRIED; // find first person record as well PPersonRow Husband = (PPersonRow)FamilyView[0].Row; Husband.MaritalStatus = MPartnerConstants.MARITALSTATUS_MARRIED; AFamilyRow.MaritalStatus = MPartnerConstants.MARITALSTATUS_MARRIED; AFamilyRow.FirstName = Husband.FirstName + " and " + PersonRow.FirstName; AFamilyRow.Title = Husband.Title + " and " + PersonRow.Title; // update family shortname FamilyPartnerRow.AddresseeTypeCode = MPartnerConstants.ADDRESSEETYPE_COUPLE; FamilyPartnerRow.PartnerShortName = Calculations.DeterminePartnerShortName( AFamilyRow.FamilyName, AFamilyRow.Title, AFamilyRow.FirstName); } else if (FamilyView.Count > 1) { FamilyPartnerRow.AddresseeTypeCode = MPartnerConstants.ADDRESSEETYPE_FAMILY; } AMainDS.PPerson.Rows.Add(PersonRow); AMainDS.PPartner.Rows.Add(PartnerRow); }
/// <summary> /// This empty Method is needed so that the 'SAVEDATA' section of the template for the auto-generated class can be filled in. /// It is a HACK, since this screen is read-only and wouldn't need any saving code at all... /// FIXME in the WinForms generator/devise another template for read-only screens... /// </summary> /// <param name="ARow">Not evaluated.</param> /// <returns>void</returns> private void GetDataFromControlsManual(PPersonRow ARow) { }
/// <summary> /// export all posted invoices for conference and seminar participants in this year /// </summary> public static void Export(string AOutputPath, char ACSVSeparator, string ANewLine, Int32 ALedgerNumber, Int32 AFinancialYear, string ACostCentres) { string filename = Path.GetFullPath(Path.Combine(AOutputPath, "participants.csv")); Console.WriteLine("Writing file: " + filename); TDBTransaction Transaction = new TDBTransaction(); AGiftDetailTable giftdetails = new AGiftDetailTable(); AGiftTable gifts = new AGiftTable(); AGiftBatchTable batches = new AGiftBatchTable(); PPersonTable persons = new PPersonTable(); DBAccess.ReadTransaction(ref Transaction, delegate { TDataBase db = Transaction.DataBaseObj; // all gift details towards a costcentre that needs to be exported string sql = String.Format("SELECT DISTINCT D.* " + "FROM PUB_{0} AS B, PUB_{1} AS G, PUB_{2} AS D " + "WHERE B.{3} = {4} AND B.{5} = {6} AND B.{7}='{8}' " + "AND G.{3} = B.{3} AND G.{9} = B.{9} " + "AND D.{3} = G.{3} AND D.{9} = G.{9} AND D.{10} = G.{10} " + "AND D.{11} IN ({12}) " + "AND NOT D.{13} = '{14}'", AGiftBatchTable.GetTableDBName(), AGiftTable.GetTableDBName(), AGiftDetailTable.GetTableDBName(), AGiftBatchTable.GetLedgerNumberDBName(), ALedgerNumber, AGiftBatchTable.GetBatchYearDBName(), AFinancialYear, AGiftBatchTable.GetBatchStatusDBName(), MFinanceConstants.BATCH_POSTED, AGiftBatchTable.GetBatchNumberDBName(), AGiftTable.GetGiftTransactionNumberDBName(), AGiftDetailTable.GetCostCentreCodeDBName(), "'" + ACostCentres.Replace(",", "','") + "'", AGiftDetailTable.GetMotivationGroupCodeDBName(), "GIFT"); db.SelectDT(giftdetails, sql, Transaction, null, 0, 0); sql = sql.Replace("SELECT DISTINCT D.*", "SELECT DISTINCT G.*"); db.SelectDT(gifts, sql, Transaction, null, 0, 0); gifts.DefaultView.Sort = AGiftTable.GetBatchNumberDBName() + "," + AGiftTable.GetGiftTransactionNumberDBName(); sql = sql.Replace("SELECT DISTINCT G.*", "SELECT DISTINCT B.*"); db.SelectDT(batches, sql, Transaction, null, 0, 0); batches.DefaultView.Sort = AGiftTable.GetBatchNumberDBName(); sql = String.Format("SELECT DISTINCT P.* " + "FROM PUB_{0} AS B, PUB_{1} AS G, PUB_{2} AS D, PUB.{15} AS P " + "WHERE B.{3} = {4} AND B.{5} = {6} AND B.{7}='{8}' " + "AND G.{3} = B.{3} AND G.{9} = B.{9} " + "AND D.{3} = G.{3} AND D.{9} = G.{9} AND D.{10} = G.{10} " + "AND D.{11} IN ({12}) " + "AND NOT D.{13} = '{14}' " + "AND P.{16} = G.{17}", AGiftBatchTable.GetTableDBName(), AGiftTable.GetTableDBName(), AGiftDetailTable.GetTableDBName(), AGiftBatchTable.GetLedgerNumberDBName(), ALedgerNumber, AGiftBatchTable.GetBatchYearDBName(), AFinancialYear, AGiftBatchTable.GetBatchStatusDBName(), MFinanceConstants.BATCH_POSTED, AGiftBatchTable.GetBatchNumberDBName(), AGiftTable.GetGiftTransactionNumberDBName(), AGiftDetailTable.GetCostCentreCodeDBName(), "'" + ACostCentres.Replace(",", "','") + "'", AGiftDetailTable.GetMotivationGroupCodeDBName(), "GIFT", PPersonTable.GetTableDBName(), PPersonTable.GetPartnerKeyDBName(), AGiftTable.GetDonorKeyDBName()); db.SelectDT(persons, sql, Transaction, null, 0, 0); persons.DefaultView.Sort = PPersonTable.GetPartnerKeyDBName(); }); StringBuilder sb = new StringBuilder(); foreach (AGiftDetailRow detail in giftdetails.Rows) { AGiftRow gift = (AGiftRow)gifts.DefaultView.FindRows(new object[] { detail.BatchNumber, detail.GiftTransactionNumber })[0].Row; AGiftBatchRow batch = (AGiftBatchRow)batches.DefaultView.FindRows(detail.BatchNumber)[0].Row; DataRowView[] personList = persons.DefaultView.FindRows(gift.DonorKey); PPersonRow person = (personList.Length > 0 ? (PPersonRow)personList[0].Row : null); sb.Append(StringHelper.StrMerge( new string[] { "GB" + detail.BatchNumber.ToString() + "_G" + detail.GiftTransactionNumber.ToString() + "_D" + detail.DetailNumber.ToString(), String.Format("{0:N}", detail.GiftTransactionAmount), batch.GlEffectiveDate.ToString("yyyyMMdd"), gift.DonorKey.ToString(), person != null ? (person.DateOfBirth.HasValue ? person.DateOfBirth.Value.ToString("yyyyMMdd") : string.Empty) : string.Empty, detail.CostCentreCode, batch.BatchDescription, detail.GiftCommentOne, detail.GiftCommentTwo }, ACSVSeparator)); sb.Append(ANewLine); } StreamWriter sw = new StreamWriter(filename, false, Encoding.GetEncoding(1252)); sw.Write(sb.ToString()); sw.Close(); }
/// <summary> /// export all details of workers in this year /// </summary> public static void Export(string AOutputPath, char ACSVSeparator, string ANewLine, Int64 SiteKey, Int32 AYear) { string filename = Path.GetFullPath(Path.Combine(AOutputPath, "angestellte.csv")); Console.WriteLine("Writing file: " + filename); StringBuilder sb = new StringBuilder(); PmStaffDataTable staffdata = new PmStaffDataTable(); PPartnerTable partners = new PPartnerTable(); partners.Constraints.Clear(); PPersonTable persons = new PPersonTable(); persons.Constraints.Clear(); TDBTransaction Transaction = new TDBTransaction(); DBAccess.ReadTransaction(ref Transaction, delegate { TDataBase db = Transaction.DataBaseObj; // get all partners with a commitment period for this date range // ignore non-native workers. field must be home office, or receiving field string sql = String.Format( "SELECT * FROM PUB_pm_staff_data s, PUB_p_partner p, PUB_p_person per " + "WHERE p.p_partner_key_n = s.p_partner_key_n " + "AND (s.pm_home_office_n = ? OR pm_receiving_field_office_n = ? OR pm_receiving_field_n = ?) " + "AND per.p_partner_key_n = s.p_partner_key_n " + // start of commitment during this year "AND ((pm_start_of_commitment_d BETWEEN ? AND ?) " + // start of commitment before this year, end of commitment null or during/after this year " OR (pm_start_of_commitment_d < ? AND (pm_start_of_commitment_d IS NULL OR pm_start_of_commitment_d >= ?)))"); List <OdbcParameter> Parameters = new List <OdbcParameter>(); OdbcParameter param; param = new OdbcParameter("field", OdbcType.Numeric); param.Value = SiteKey; Parameters.Add(param); param = new OdbcParameter("field", OdbcType.Numeric); param.Value = SiteKey; Parameters.Add(param); param = new OdbcParameter("field", OdbcType.Numeric); param.Value = SiteKey; Parameters.Add(param); param = new OdbcParameter("startdate", OdbcType.DateTime); param.Value = new DateTime(AYear, 1, 1); Parameters.Add(param); param = new OdbcParameter("enddate", OdbcType.DateTime); param.Value = new DateTime(AYear, 12, 31); Parameters.Add(param); param = new OdbcParameter("startdate", OdbcType.DateTime); param.Value = new DateTime(AYear, 1, 1); Parameters.Add(param); param = new OdbcParameter("startdate", OdbcType.DateTime); param.Value = new DateTime(AYear, 1, 1); Parameters.Add(param); db.SelectDT(staffdata, sql.Replace("SELECT *", "SELECT s.*"), Transaction, Parameters.ToArray(), 0, 0); db.SelectDT(partners, sql.Replace("SELECT *", "SELECT p.*"), Transaction, Parameters.ToArray(), 0, 0); db.SelectDT(persons, sql.Replace("SELECT *", "SELECT per.*"), Transaction, Parameters.ToArray(), 0, 0); }); foreach (PmStaffDataRow staff in staffdata.Rows) { partners.DefaultView.Sort = "p_partner_key_n"; persons.DefaultView.Sort = "p_partner_key_n"; PPartnerRow partner = (PPartnerRow)partners.DefaultView.FindRows(new object[] { staff.PartnerKey })[0].Row; PPersonRow person = (PPersonRow)persons.DefaultView.FindRows(new object[] { staff.PartnerKey })[0].Row; sb.Append(StringHelper.StrMerge( new string[] { partner.PartnerKey.ToString(), partner.PartnerShortName.ToString(), person.DateOfBirth.HasValue?person.DateOfBirth.Value.ToString("yyyyMMdd"):String.Empty, partner.PartnerKey.ToString() }, ACSVSeparator)); sb.Append(ANewLine); } StreamWriter sw = new StreamWriter(filename, false, Encoding.GetEncoding(1252)); sw.Write(sb.ToString()); sw.Close(); }
/// <summary> /// Validates the Partner Detail data of a Partner of PartnerClass PERSON. /// </summary> /// <param name="AContext">Context that describes where the data validation failed.</param> /// <param name="ARow">The <see cref="DataRow" /> which holds the the data against which the validation is run.</param> /// <param name="ACacheRetriever">Delegate that returns the specified DataTable from the data cache (client- or serverside). /// Delegate Method needs to be for the MPartner Cache (that is, it needs to work with the <see cref="TCacheablePartnerTablesEnum" /> Enum!</param> /// <param name="AVerificationResultCollection">Will be filled with any <see cref="TVerificationResult" /> items if /// data validation errors occur.</param> /// <param name="AValidationControlsDict">A <see cref="TValidationControlsDict" /> containing the Controls that /// display data that is about to be validated.</param> /// <returns>void</returns> public static void ValidatePartnerPersonManual(object AContext, PPersonRow ARow, TGetCacheableDataTableFromCache ACacheRetriever, ref TVerificationResultCollection AVerificationResultCollection, TValidationControlsDict AValidationControlsDict) { DataColumn ValidationColumn; TValidationControlsData ValidationControlsData; TVerificationResult VerificationResult; // Don't validate deleted DataRows if (ARow.RowState == DataRowState.Deleted) { return; } // 'Date of Birth' must have a sensible value (must not be below 1850 and must not lie in the future) ValidationColumn = ARow.Table.Columns[PPersonTable.ColumnDateOfBirthId]; if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { if (!ARow.IsDateOfBirthNull()) { VerificationResult = TDateChecks.IsDateBetweenDates( ARow.DateOfBirth, new DateTime(1850, 1, 1), DateTime.Today, ValidationControlsData.ValidationControlLabel, TDateBetweenDatesCheckType.dbdctUnrealisticDate, TDateBetweenDatesCheckType.dbdctNoFutureDate, AContext, ValidationColumn, ValidationControlsData.ValidationControl); // Handle addition to/removal from TVerificationResultCollection AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn); } } // 'Marital Status' must not be unassignable ValidationColumn = ARow.Table.Columns[PPersonTable.ColumnMaritalStatusId]; if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { PtMaritalStatusTable TypeTable; PtMaritalStatusRow TypeRow; VerificationResult = null; if ((!ARow.IsMaritalStatusNull()) && (ARow.MaritalStatus != String.Empty)) { TypeTable = (PtMaritalStatusTable)TSharedDataCache.TMPartner.GetCacheablePartnerTable( TCacheablePartnerTablesEnum.MaritalStatusList); TypeRow = (PtMaritalStatusRow)TypeTable.Rows.Find(ARow.MaritalStatus); // 'Marital Status' must not be unassignable if ((TypeRow != null) && !TypeRow.AssignableFlag && (TypeRow.IsAssignableDateNull() || (TypeRow.AssignableDate <= DateTime.Today))) { // if 'Marital Status' is unassignable then check if the value has been changed or if it is a new record if (TSharedValidationHelper.IsRowAddedOrFieldModified(ARow, PPersonTable.GetMaritalStatusDBName())) { VerificationResult = new TScreenVerificationResult(new TVerificationResult(AContext, ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_VALUEUNASSIGNABLE_WARNING, new string[] { ValidationControlsData.ValidationControlLabel, ARow.MaritalStatus })), ValidationColumn, ValidationControlsData.ValidationControl); } } } // Handle addition/removal to/from TVerificationResultCollection AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn); } // 'MaritalStatusSince' must be valid ValidationColumn = ARow.Table.Columns[PPersonTable.ColumnMaritalStatusSinceId]; if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { VerificationResult = TSharedValidationControlHelper.IsNotInvalidDate(ARow.MaritalStatusSince, ValidationControlsData.ValidationControlLabel, AVerificationResultCollection, false, AContext, ValidationColumn, ValidationControlsData.ValidationControl); // Handle addition to/removal from TVerificationResultCollection AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn); } // 'OccupationCode' must be valid ValidationColumn = ARow.Table.Columns[PPersonTable.ColumnOccupationCodeId]; if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { if (!string.IsNullOrEmpty(ARow.OccupationCode)) { Type tmp; DataTable CachedDT = ACacheRetriever(Enum.GetName(typeof(TCacheablePartnerTablesEnum), TCacheablePartnerTablesEnum.OccupationList), out tmp); DataRow FoundDR = CachedDT.Rows.Find(new object[] { ARow.OccupationCode }); if (FoundDR == null) { VerificationResult = new TVerificationResult(ValidationControlsData.ValidationControl, ErrorCodes.GetErrorInfo( PetraErrorCodes.ERR_OCCUPATIONCODE_INVALID, new string[] { ARow.OccupationCode })); VerificationResult = new TScreenVerificationResult(VerificationResult, ValidationColumn, ValidationControlsData.ValidationControl); // Handle addition to/removal from TVerificationResultCollection AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn); } } } }
public static String BuildAddressBlock(String AAddressLayoutBlock, TFormDataPartner AFormData, TPartnerClass APartnerClass, TDBTransaction ATransaction) { String AddressBlock = ""; List <String> AddressTokenList = new List <String>(); String AddressLineText = ""; String AddressLineTokenText = ""; Boolean PrintAnyway = false; Boolean CapsOn = false; Boolean UseContact = false; String SpacePlaceholder = ""; PPersonTable PersonTable; PPersonRow PersonRow = null; PFamilyTable FamilyTable; PFamilyRow FamilyRow = null; Int64 ContactPartnerKey = 0; AddressTokenList = BuildTokenListFromAddressLayoutBlock(AAddressLayoutBlock); // initialize values AddressLineText = ""; PrintAnyway = false; foreach (String AddressLineToken in AddressTokenList) { switch (AddressLineToken) { case "[[TitleAndSpace]]": case "[[FirstNameAndSpace]]": case "[[FirstInitialAndSpace]]": case "[[LastNameAndSpace]]": SpacePlaceholder = " "; break; default: SpacePlaceholder = ""; break; } switch (AddressLineToken) { case "[[AcademicTitle]]": if (UseContact) { if (PersonRow != null) { AddressLineText += ConvertIfUpperCase(PersonRow.AcademicTitle, CapsOn); } } else { if (AFormData.GetType() == typeof(TFormDataPerson)) { AddressLineText += ConvertIfUpperCase(((TFormDataPerson)AFormData).AcademicTitle, CapsOn); } } break; case "[[AddresseeType]]": AddressLineText += ConvertIfUpperCase(AFormData.AddresseeType, CapsOn); break; case "[[Address3]]": AddressLineText += ConvertIfUpperCase(AFormData.Address3, CapsOn); break; case "[[CapsOn]]": CapsOn = true; break; case "[[CapsOff]]": CapsOn = false; break; case "[[City]]": AddressLineText += ConvertIfUpperCase(AFormData.City, CapsOn); break; case "[[CountryName]]": AddressLineText += ConvertIfUpperCase(AFormData.CountryName, CapsOn); break; case "[[CountryInLocalLanguage]]": AddressLineText += ConvertIfUpperCase(AFormData.CountryInLocalLanguage, CapsOn); break; case "[[County]]": AddressLineText += ConvertIfUpperCase(AFormData.County, CapsOn); break; case "[[UseContact]]": /* Get the person or family record that is acting as the contact * only applicable to churches and organisations. */ switch (APartnerClass) { case TPartnerClass.CHURCH: PChurchTable ChurchTable; PChurchRow ChurchRow; ChurchTable = PChurchAccess.LoadByPrimaryKey(Convert.ToInt64(AFormData.PartnerKey), ATransaction); if (ChurchTable.Count > 0) { ChurchRow = (PChurchRow)ChurchTable.Rows[0]; if (!ChurchRow.IsContactPartnerKeyNull()) { ContactPartnerKey = ChurchRow.ContactPartnerKey; } } break; case TPartnerClass.ORGANISATION: POrganisationTable OrganisationTable; POrganisationRow OrganisationRow; OrganisationTable = POrganisationAccess.LoadByPrimaryKey(Convert.ToInt64(AFormData.PartnerKey), ATransaction); if (OrganisationTable.Count > 0) { OrganisationRow = (POrganisationRow)OrganisationTable.Rows[0]; if (!OrganisationRow.IsContactPartnerKeyNull()) { ContactPartnerKey = OrganisationRow.ContactPartnerKey; } } break; default: ContactPartnerKey = 0; break; } if (ContactPartnerKey > 0) { PersonTable = PPersonAccess.LoadByPrimaryKey(ContactPartnerKey, ATransaction); if (PersonTable.Count > 0) { PersonRow = (PPersonRow)PersonTable.Rows[0]; } else { FamilyTable = PFamilyAccess.LoadByPrimaryKey(ContactPartnerKey, ATransaction); if (FamilyTable.Count > 0) { FamilyRow = (PFamilyRow)FamilyTable.Rows[0]; } } } UseContact = true; break; case "[[CountryCode]]": AddressLineText += ConvertIfUpperCase(AFormData.CountryCode, CapsOn); break; case "[[Decorations]]": if (UseContact) { if (PersonRow != null) { AddressLineText += ConvertIfUpperCase(PersonRow.Decorations, CapsOn); } } else { if (AFormData.GetType() == typeof(TFormDataPerson)) { AddressLineText += ConvertIfUpperCase(((TFormDataPerson)AFormData).Decorations, CapsOn); } } break; case "[[FirstName]]": case "[[FirstNameAndSpace]]": AddressLineTokenText = ""; if (UseContact) { if (PersonRow != null) { AddressLineTokenText = ConvertIfUpperCase(PersonRow.FirstName, CapsOn); } else if (FamilyRow != null) { AddressLineTokenText = ConvertIfUpperCase(FamilyRow.FirstName, CapsOn); } } else { AddressLineTokenText = ConvertIfUpperCase(AFormData.FirstName, CapsOn); } if ((AddressLineTokenText != null) && (AddressLineTokenText.Length > 0)) { AddressLineText += AddressLineTokenText + SpacePlaceholder; } break; case "[[FirstInitial]]": case "[[FirstInitialAndSpace]]": AddressLineTokenText = ""; if (UseContact) { if (PersonRow != null) { if (PersonRow.FirstName.Length > 0) { AddressLineTokenText = ConvertIfUpperCase(PersonRow.FirstName.Substring(0, 1), CapsOn); } } else if (FamilyRow != null) { if (PersonRow.FirstName.Length > 0) { AddressLineTokenText = ConvertIfUpperCase(FamilyRow.FirstName.Substring(0, 1), CapsOn); } } } else { if (AFormData.FirstName.Length > 0) { AddressLineTokenText = ConvertIfUpperCase(AFormData.FirstName.Substring(0, 1), CapsOn); } } if ((AddressLineTokenText != null) && (AddressLineTokenText.Length > 0)) { AddressLineText += AddressLineTokenText + SpacePlaceholder; } break; case "[[LastName]]": case "[[LastNameAndSpace]]": AddressLineTokenText = ""; if (UseContact) { if (PersonRow != null) { AddressLineTokenText = ConvertIfUpperCase(PersonRow.FamilyName, CapsOn); } else if (FamilyRow != null) { AddressLineTokenText = ConvertIfUpperCase(FamilyRow.FamilyName, CapsOn); } } else { AddressLineTokenText = ConvertIfUpperCase(AFormData.LastName, CapsOn); } if ((AddressLineTokenText != null) && (AddressLineTokenText.Length > 0)) { AddressLineText += AddressLineTokenText + SpacePlaceholder; } break; case "[[Address1]]": AddressLineText += ConvertIfUpperCase(AFormData.Address1, CapsOn); break; case "[[MiddleName]]": if (UseContact) { if (PersonRow != null) { AddressLineText += ConvertIfUpperCase(PersonRow.MiddleName1, CapsOn); } } else { if (AFormData.GetType() == typeof(TFormDataPerson)) { AddressLineText += ConvertIfUpperCase(((TFormDataPerson)AFormData).MiddleName, CapsOn); } } break; case "[[Org/Church]]": /* if the contact person is being printed then might still want the * Organisation or Church name printed. This does it but only if there * is a valid contact. */ if (UseContact) { AddressLineText += ConvertIfUpperCase(AFormData.ShortName, CapsOn); } break; case "[[PartnerKey]]": AddressLineText += ConvertIfUpperCase(AFormData.PartnerKey, CapsOn); break; case "[[ShortName]]": AddressLineText += ConvertIfUpperCase(AFormData.ShortName, CapsOn); break; case "[[LocalName]]": if (AFormData.LocalName != "") { AddressLineText += ConvertIfUpperCase(AFormData.LocalName, CapsOn); } else { AddressLineText += ConvertIfUpperCase(AFormData.ShortName, CapsOn); } break; case "[[PostalCode]]": AddressLineText += ConvertIfUpperCase(AFormData.PostalCode, CapsOn); break; case "[[Enclosures]]": AddressLineText += AFormData.Enclosures; break; case "[[MailingCode]]": AddressLineText += AFormData.MailingCode; break; case "[[Tab]]": AddressLineText += "\t"; break; case "[[Space]]": AddressLineText += " "; break; case "[[AddressStreet2]]": AddressLineText += ConvertIfUpperCase(AFormData.AddressStreet2, CapsOn); break; case "[[Title]]": case "[[TitleAndSpace]]": AddressLineTokenText = ConvertIfUpperCase(AFormData.Title, CapsOn); if ((AddressLineTokenText != null) && (AddressLineTokenText.Length > 0)) { AddressLineText += AddressLineTokenText + SpacePlaceholder; } break; case "[[NoSuppress]]": PrintAnyway = true; break; case "[[LocationKey]]": AddressLineText += AFormData.LocationKey; break; case "[[LineFeed]]": // only add line if not empty and not suppressed if (PrintAnyway || (!PrintAnyway && (AddressLineText.Trim() != ""))) { AddressBlock += AddressLineText + "\r\n"; } // reset values AddressLineText = ""; PrintAnyway = false; break; default: AddressLineText += ConvertIfUpperCase(AddressLineToken, CapsOn); break; } } // this is only for last line if there was no line feed: // only add line if not empty and not suppressed if (PrintAnyway || (!PrintAnyway && (AddressLineText.Trim() != ""))) { AddressBlock += AddressLineText + "\r\n"; } // or just get the element list from cached table (since we need to get different ones depending on country) return(AddressBlock); }
/// <summary> /// Retrieves data that will be shown on the 'Overview' UserControl and adds it to <paramref name="AIndividualDataDS" />. /// </summary> /// <param name="APartnerKey">PartnerKey of the Person to load data for.</param> /// <param name="AIndividualDataDS">Typed DataSet of Type <see cref="IndividualDataTDS" />. Needs to be instantiated already!</param> /// <param name="AReadTransaction">Open Database transaction.</param> /// <returns>void</returns> private static void BuildSummaryData(Int64 APartnerKey, ref IndividualDataTDS AIndividualDataDS, TDBTransaction AReadTransaction) { string StrNotAvailable = Catalog.GetString("Not Available"); IndividualDataTDSSummaryDataTable SummaryDT; IndividualDataTDSSummaryDataRow SummaryDR; IndividualDataTDSMiscellaneousDataRow MiscellaneousDataDR = AIndividualDataDS.MiscellaneousData[0]; PPersonTable PPersonDT; PPersonRow PersonDR = null; PmPassportDetailsTable PassportDetailsDT; PmStaffDataTable PmStaffDataDT; PmStaffDataRow PmStaffDataDR = null; PmJobAssignmentTable PmJobAssignmentDT = null; PUnitTable PUnitDT = null; PmJobAssignmentRow PmJobAssignmentDR; IndividualDataTDSJobAssignmentStaffDataCombinedRow JobAssiStaffDataCombDR; int JobAssiStaffDataCombKey = 0; TCacheable CommonCacheable = new TCacheable(); TPartnerCacheable PartnerCacheable = new TPartnerCacheable(); string MaritalStatusDescr; StringCollection PassportColumns; string Nationalities; PPartnerRelationshipTable PartnerRelationshipDT; PPartnerTable PartnerDT; PPartnerRow PartnerDR = null; PLocationRow LocationDR; PPartnerLocationRow PartnerLocationDR; string PhoneNumber; string EmailAddress; Int64 ChurchPartnerKey; SummaryDT = new IndividualDataTDSSummaryDataTable(); SummaryDR = SummaryDT.NewRowTyped(false); SummaryDR.PartnerKey = APartnerKey; #region Person Info PPersonDT = PPersonAccess.LoadByPrimaryKey(APartnerKey, AReadTransaction); if (PPersonDT.Rows.Count == 1) { PersonDR = (PPersonRow)PPersonDT.Rows[0]; } if (PersonDR != null) { SummaryDR.DateOfBirth = PersonDR.DateOfBirth; SummaryDR.Gender = PersonDR.Gender; MaritalStatusDescr = PartnerCodeHelper.GetMaritalStatusDescription( @PartnerCacheable.GetCacheableTable, PersonDR.MaritalStatus); if (MaritalStatusDescr != String.Empty) { MaritalStatusDescr = " - " + MaritalStatusDescr; } SummaryDR.MaritalStatus = PersonDR.MaritalStatus + MaritalStatusDescr; } else { SummaryDR.SetDateOfBirthNull(); SummaryDR.Gender = StrNotAvailable; SummaryDR.MaritalStatus = StrNotAvailable; } #region Nationalities PassportColumns = StringHelper.StrSplit( PmPassportDetailsTable.GetDateOfIssueDBName() + "," + PmPassportDetailsTable.GetDateOfExpirationDBName() + "," + PmPassportDetailsTable.GetPassportNationalityCodeDBName() + "," + PmPassportDetailsTable.GetMainPassportDBName(), ","); PassportDetailsDT = PmPassportDetailsAccess.LoadViaPPerson(APartnerKey, PassportColumns, AReadTransaction, null, 0, 0); Nationalities = Ict.Petra.Shared.MPersonnel.Calculations.DeterminePersonsNationalities( @CommonCacheable.GetCacheableTable, PassportDetailsDT); if (Nationalities != String.Empty) { SummaryDR.Nationalities = Nationalities; } else { SummaryDR.Nationalities = StrNotAvailable; } #endregion #region Phone and Email (from 'Best Address') if (TContactDetailsAggregate.GetPrimaryEmailAndPrimaryPhone(APartnerKey, out PhoneNumber, out EmailAddress)) { SummaryDR.PrimaryPhoneNumber = PhoneNumber ?? StrNotAvailable; SummaryDR.PrimaryEmailAddress = EmailAddress ?? StrNotAvailable; } else { SummaryDR.PrimaryPhoneNumber = StrNotAvailable; SummaryDR.PrimaryEmailAddress = StrNotAvailable; } #endregion #endregion #region Commitments/Jobs PmStaffDataDT = PmStaffDataAccess.LoadViaPPerson(APartnerKey, AReadTransaction); MiscellaneousDataDR.ItemsCountCommitmentPeriods = PmStaffDataDT.Rows.Count; // First check if the PERSON has got any Commitments if (PmStaffDataDT.Rows.Count > 0) { foreach (DataRow DR in PmStaffDataDT.Rows) { JobAssiStaffDataCombDR = AIndividualDataDS.JobAssignmentStaffDataCombined.NewRowTyped(false); JobAssiStaffDataCombDR.Key = JobAssiStaffDataCombKey++; JobAssiStaffDataCombDR.PartnerKey = APartnerKey; PmStaffDataDR = (PmStaffDataRow)DR; if (!(PmStaffDataDR.IsReceivingFieldNull()) && (PmStaffDataDR.ReceivingField != 0)) { PUnitDT = PUnitAccess.LoadByPrimaryKey(PmStaffDataDR.ReceivingField, AReadTransaction); JobAssiStaffDataCombDR.FieldKey = PmStaffDataDR.ReceivingField; JobAssiStaffDataCombDR.FieldName = PUnitDT[0].UnitName; } else { JobAssiStaffDataCombDR.FieldKey = 0; JobAssiStaffDataCombDR.FieldName = "[None]"; } JobAssiStaffDataCombDR.Position = PmStaffDataDR.JobTitle; JobAssiStaffDataCombDR.FromDate = PmStaffDataDR.StartOfCommitment; JobAssiStaffDataCombDR.ToDate = PmStaffDataDR.EndOfCommitment; AIndividualDataDS.JobAssignmentStaffDataCombined.Rows.Add(JobAssiStaffDataCombDR); } } else { // The PERSON hasn't got any Commitments, therefore check if the PERSON has any Job Assignments PmJobAssignmentDT = PmJobAssignmentAccess.LoadViaPPartner(APartnerKey, AReadTransaction); if (PmJobAssignmentDT.Rows.Count > 0) { foreach (DataRow DR in PmJobAssignmentDT.Rows) { JobAssiStaffDataCombDR = AIndividualDataDS.JobAssignmentStaffDataCombined.NewRowTyped(false); JobAssiStaffDataCombDR.Key = JobAssiStaffDataCombKey++; JobAssiStaffDataCombDR.PartnerKey = APartnerKey; PmJobAssignmentDR = (PmJobAssignmentRow)DR; if (PmJobAssignmentDR.UnitKey != 0) { PUnitDT = PUnitAccess.LoadByPrimaryKey(PmJobAssignmentDR.UnitKey, AReadTransaction); JobAssiStaffDataCombDR.FieldKey = PmJobAssignmentDR.UnitKey; JobAssiStaffDataCombDR.FieldName = PUnitDT[0].UnitName; } else { JobAssiStaffDataCombDR.FieldKey = 0; JobAssiStaffDataCombDR.FieldName = "[None]"; } JobAssiStaffDataCombDR.Position = PmJobAssignmentDR.PositionName; JobAssiStaffDataCombDR.FromDate = PmJobAssignmentDR.FromDate; JobAssiStaffDataCombDR.ToDate = PmJobAssignmentDR.ToDate; AIndividualDataDS.JobAssignmentStaffDataCombined.Rows.Add(JobAssiStaffDataCombDR); } } } #endregion #region Church Info SummaryDR.ChurchName = StrNotAvailable; SummaryDR.ChurchAddress = StrNotAvailable; SummaryDR.ChurchPrimaryPhoneNumber = StrNotAvailable; SummaryDR.ChurchPastor = StrNotAvailable; SummaryDR.ChurchPastorsPrimaryPhoneNumber = StrNotAvailable; SummaryDR.NumberOfShownSupportingChurchPastors = 0; // Find SUPPCHURCH Relationship PartnerRelationshipDT = PPartnerRelationshipAccess.LoadUsingTemplate(new TSearchCriteria[] { new TSearchCriteria(PPartnerRelationshipTable.GetRelationKeyDBName(), APartnerKey), new TSearchCriteria(PPartnerRelationshipTable.GetRelationNameDBName(), "SUPPCHURCH") }, AReadTransaction); SummaryDR.NumberOfShownSupportingChurches = PartnerRelationshipDT.Rows.Count; if (PartnerRelationshipDT.Rows.Count > 0) { ChurchPartnerKey = PartnerRelationshipDT[0].PartnerKey; // Load Church Partner PartnerDT = PPartnerAccess.LoadByPrimaryKey(ChurchPartnerKey, AReadTransaction); if (PartnerDT.Rows.Count > 0) { PartnerDR = PartnerDT[0]; // Church Name if (PartnerDR.PartnerShortName != String.Empty) { SummaryDR.ChurchName = PartnerDR.PartnerShortName; } #region Church Address and Phone ServerCalculations.DetermineBestAddress(PartnerRelationshipDT[0].PartnerKey, out PartnerLocationDR, out LocationDR); if (LocationDR != null) { SummaryDR.ChurchAddress = Calculations.DetermineLocationString(LocationDR, Calculations.TPartnerLocationFormatEnum.plfCommaSeparated); } if (TContactDetailsAggregate.GetPrimaryPhoneNumber(PartnerRelationshipDT[0].PartnerKey, out PhoneNumber)) { SummaryDR.ChurchPrimaryPhoneNumber = PhoneNumber ?? StrNotAvailable; } else { SummaryDR.ChurchPrimaryPhoneNumber = StrNotAvailable; } #endregion #region Pastor // Find PASTOR Relationship PartnerRelationshipDT.Rows.Clear(); PartnerRelationshipDT = PPartnerRelationshipAccess.LoadUsingTemplate(new TSearchCriteria[] { new TSearchCriteria(PPartnerRelationshipTable.GetPartnerKeyDBName(), ChurchPartnerKey), new TSearchCriteria(PPartnerRelationshipTable.GetRelationNameDBName(), "PASTOR") }, AReadTransaction); SummaryDR.NumberOfShownSupportingChurchPastors = PartnerRelationshipDT.Rows.Count; if (PartnerRelationshipDT.Rows.Count > 0) { // Load PASTOR Partner PartnerDT = PPartnerAccess.LoadByPrimaryKey(PartnerRelationshipDT[0].RelationKey, AReadTransaction); if (PartnerDT.Rows.Count > 0) { PartnerDR = PartnerDT[0]; // Pastor's Name if (PartnerDR.PartnerShortName != String.Empty) { SummaryDR.ChurchPastor = PartnerDR.PartnerShortName; } #region Pastor's Phone if (TContactDetailsAggregate.GetPrimaryPhoneNumber(PartnerRelationshipDT[0].RelationKey, out PhoneNumber)) { SummaryDR.ChurchPastorsPrimaryPhoneNumber = PhoneNumber ?? StrNotAvailable; } else { SummaryDR.ChurchPastorsPrimaryPhoneNumber = StrNotAvailable; } #endregion } } #endregion } } #endregion // Add Summary DataRow to Summary DataTable SummaryDT.Rows.Add(SummaryDR); // Add Row to 'SummaryData' DataTable in Typed DataSet 'IndividualDataTDS' AIndividualDataDS.Merge(SummaryDT); }
/// <summary> /// create PPartnerLocation records for the FAMILY partner, and all the PERSON records of this family /// </summary> public static void GenerateAddressForFamily(XmlNode ACurrentNode, PFamilyRow AFamilyRow, PartnerEditTDS AMainDS) { PLocationRow locationRow = AMainDS.PLocation.NewRowTyped(); locationRow.SiteKey = 0; // DomainManager.GSiteKey; locationRow.LocationKey = (AMainDS.PLocation.Count + 1) * -1; locationRow.StreetName = TXMLParser.GetAttribute(ACurrentNode, "Addr2"); locationRow.PostalCode = TXMLParser.GetAttribute(ACurrentNode, "PostCode"); locationRow.City = TXMLParser.GetAttribute(ACurrentNode, "City"); locationRow.County = TXMLParser.GetAttribute(ACurrentNode, "Province"); locationRow.CountryCode = TXMLParser.GetAttribute(ACurrentNode, "CountryCode"); AMainDS.PLocation.Rows.Add(locationRow); PPartnerLocationRow familyLocationRow = AMainDS.PPartnerLocation.NewRowTyped(); familyLocationRow.PartnerKey = AFamilyRow.PartnerKey; familyLocationRow.LocationKey = locationRow.LocationKey; familyLocationRow.SiteKey = locationRow.SiteKey; familyLocationRow.LocationType = MPartnerConstants.LOCATIONTYPE_HOME; familyLocationRow.SendMail = true; string gender = TXMLParser.GetAttribute(ACurrentNode, "familySituation"); Random r = new Random(); string email = TXMLParser.GetAttribute(ACurrentNode, "FemaleEmail"); if ((gender == "singleMan") || ((gender == "family") && (r.Next(2) == 0))) { email = TXMLParser.GetAttribute(ACurrentNode, "MaleEmail"); } if (email.Length > 0) { PPartnerAttributeRow partnerAttributeRow = AMainDS.PPartnerAttribute.NewRowTyped(); partnerAttributeRow.PartnerKey = AFamilyRow.PartnerKey; partnerAttributeRow.AttributeType = MPartnerConstants.ATTR_TYPE_EMAIL; partnerAttributeRow.Index = 0; partnerAttributeRow.Primary = true; partnerAttributeRow.Value = email; AMainDS.PPartnerAttribute.Rows.Add(partnerAttributeRow); partnerAttributeRow = AMainDS.PPartnerAttribute.NewRowTyped(); partnerAttributeRow.PartnerKey = AFamilyRow.PartnerKey; partnerAttributeRow.AttributeType = MPartnerConstants.ATTR_TYPE_PARTNERS_PRIMARY_CONTACT_METHOD; partnerAttributeRow.Index = 9999; partnerAttributeRow.Primary = false; partnerAttributeRow.Value = MPartnerConstants.ATTR_TYPE_EMAIL; AMainDS.PPartnerAttribute.Rows.Add(partnerAttributeRow); } AMainDS.PPartnerLocation.Rows.Add(familyLocationRow); DataView FamilyView = new DataView(AMainDS.PPerson); FamilyView.RowFilter = PPersonTable.GetFamilyKeyDBName() + " = " + AFamilyRow.PartnerKey.ToString(); FamilyView.Sort = PPersonTable.GetFamilyIdDBName(); // for each person, also create a location record for (int countPerson = 0; countPerson < FamilyView.Count; countPerson++) { PPersonRow personRow = (PPersonRow)FamilyView[countPerson].Row; PPartnerLocationRow personLocationRow = AMainDS.PPartnerLocation.NewRowTyped(); personLocationRow.PartnerKey = personRow.PartnerKey; personLocationRow.LocationKey = familyLocationRow.LocationKey; personLocationRow.SiteKey = familyLocationRow.SiteKey; personLocationRow.LocationType = MPartnerConstants.LOCATIONTYPE_HOME; personLocationRow.SendMail = false; AMainDS.PPartnerLocation.Rows.Add(personLocationRow); } }
/// <summary> /// Get the missing information of a short term application partner. /// This could be Passport, Date of Birth, Gender, Mother Tongue, Emergency Contact, Event, Travel information /// </summary> /// <param name="APartnerKey">Partner Key</param> /// <param name="AApplicationKey">Application Key</param> /// <param name="ARegistrationOffice">Registration Office</param> /// <returns>String of all the missing informations for this partner and application</returns> private String GetMissingInfo(Int64 APartnerKey, int AApplicationKey, Int64 ARegistrationOffice) { String MissingInfo = ""; PmPassportDetailsTable PassportTable; PPersonTable PersonTable; PPartnerTable PartnerTable; PPartnerRelationshipTable PartnerRelationshipTable; PmShortTermApplicationTable ShortTermApplicationTable; // Check for passport Details PassportTable = PmPassportDetailsAccess.LoadViaPPerson(APartnerKey, situation.GetDatabaseConnection().Transaction); bool PassportDetailMissing = true; for (int Counter = 0; Counter < PassportTable.Rows.Count; ++Counter) { PmPassportDetailsRow row = (PmPassportDetailsRow)PassportTable.Rows[Counter]; if (row.FullPassportName.Length > 0) { PassportDetailMissing = false; } } if (PassportDetailMissing) { MissingInfo += " Passport Details,"; } // Check for Date of Birth and Gender PersonTable = PPersonAccess.LoadByPrimaryKey(APartnerKey, situation.GetDatabaseConnection().Transaction); if (PassportTable.Rows.Count == 0) { MissingInfo += " Date of Birth, Gender,"; } else { PPersonRow PersonRow = (PPersonRow)PersonTable.Rows[0]; if (PersonRow.IsDateOfBirthNull()) { MissingInfo += " Date of Birth,"; } if (PersonRow.Gender == "Unknown") { MissingInfo += " Gender,"; } } // Check for mother tongue PartnerTable = PPartnerAccess.LoadByPrimaryKey(APartnerKey, situation.GetDatabaseConnection().Transaction); if (PassportTable.Rows.Count == 0) { MissingInfo += " Mother Tongue,"; } else if (((PPartnerRow)PartnerTable.Rows[0]).LanguageCode == "99") { MissingInfo += " Mother Tongue,"; } // Check for partner relationship PartnerRelationshipTable = PPartnerRelationshipAccess.LoadViaPPartnerRelationKey(APartnerKey, situation.GetDatabaseConnection().Transaction); bool HasEmergencyContact = false; for (int Counter = 0; Counter < PartnerRelationshipTable.Rows.Count; ++Counter) { PPartnerRelationshipRow Row = (PPartnerRelationshipRow)PartnerRelationshipTable.Rows[Counter]; if (Row.PartnerKey == 0) { continue; } if ((Row.RelationName == "PAREND") || (Row.RelationName == "GUARDIAN") || (Row.RelationName == "RELATIVE") || (Row.RelationName == "EMER-1") || (Row.RelationName == "EMER-2") || (Row.RelationName == "NOK-OTHER")) { HasEmergencyContact = true; break; } } if (!HasEmergencyContact) { MissingInfo += " Emergency Contact,"; } // Check for Event and Travel information ShortTermApplicationTable = PmShortTermApplicationAccess.LoadByPrimaryKey(APartnerKey, AApplicationKey, ARegistrationOffice, situation.GetDatabaseConnection().Transaction); bool HasEvent = false; bool HasTravelInfo = false; for (int Counter = 0; Counter < ShortTermApplicationTable.Rows.Count; ++Counter) { PmShortTermApplicationRow Row = (PmShortTermApplicationRow)ShortTermApplicationTable.Rows[Counter]; if (Row.ConfirmedOptionCode != "") { HasEvent = true; } if ((!Row.IsArrivalNull()) && (!Row.IsDepartureNull())) { HasTravelInfo = true; } } if (!HasEvent) { MissingInfo += " Event,"; } if (!HasTravelInfo) { MissingInfo += "Travel Information,"; } // remove the last , if (MissingInfo.Length > 0) { MissingInfo.Remove(MissingInfo.Length - 1); } return(MissingInfo); }
/// <summary> /// generate the partners from a text file that was generated with Benerator /// </summary> /// <param name="AInputBeneratorFile"></param> public static void GenerateWorkers(string AInputBeneratorFile) { PartnerEditTDS MainDS = new PartnerEditTDS(); PersonnelTDS PersonnelDS = new PersonnelTDS(); // get a list of fields (all class UNIT, with unit type F) string sqlGetFieldPartnerKeys = "SELECT p_partner_key_n, p_unit_name_c FROM PUB_p_unit WHERE u_unit_type_code_c = 'F'"; DataTable FieldKeys = DBAccess.GDBAccessObj.SelectDT(sqlGetFieldPartnerKeys, "keys", null); // get a list of banks (all class BANK) string sqlGetBankPartnerKeys = "SELECT p_partner_key_n FROM PUB_p_bank"; DataTable BankKeys = DBAccess.GDBAccessObj.SelectDT(sqlGetBankPartnerKeys, "keys", null); // 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; if (familySituation == "singleMan") { familyRecord = GenerateFamilyRecord(RecordNode, "Male", MainDS); GeneratePersonRecord(RecordNode, familyRecord, "Male", MainDS); } else if (familySituation == "singleWoman") { familyRecord = GenerateFamilyRecord(RecordNode, "Female", MainDS); GeneratePersonRecord(RecordNode, familyRecord, "Female", MainDS); } else if (familySituation == "family") { familyRecord = GenerateFamilyRecord(RecordNode, "Male", MainDS); GeneratePersonRecord(RecordNode, familyRecord, "Male", MainDS); GeneratePersonRecord(RecordNode, familyRecord, "Female", MainDS); int AgeDifferenceSpouse = Convert.ToInt32(TXMLParser.GetAttribute(RecordNode, "AgeDifferenceSpouse")); DataView FamilyView = new DataView(MainDS.PPerson); FamilyView.RowFilter = PPersonTable.GetFamilyKeyDBName() + " = " + familyRecord.PartnerKey.ToString(); FamilyView.Sort = PPersonTable.GetFamilyIdDBName(); PPersonRow HusbandPersonRow = (PPersonRow)FamilyView[0].Row; PPersonRow WifePersonRow = (PPersonRow)FamilyView[1].Row; WifePersonRow.DateOfBirth = WifePersonRow.DateOfBirth.Value.AddYears( AgeDifferenceSpouse - (WifePersonRow.DateOfBirth.Value.Year - HusbandPersonRow.DateOfBirth.Value.Year)); if (DateTime.Today.Year - WifePersonRow.DateOfBirth.Value.Year < 19) { WifePersonRow.DateOfBirth.Value.AddYears( 19 - (DateTime.Today.Year - WifePersonRow.DateOfBirth.Value.Year)); } int NumberOfChildren = Convert.ToInt32(TXMLParser.GetAttribute(RecordNode, "numberOfChildren")); for (int countChild = 0; countChild < NumberOfChildren; countChild++) { DateTime DateOfBirthChild = Convert.ToDateTime( TXMLParser.GetAttribute(RecordNode, "Child" + (countChild + 1).ToString() + "DateOfBirth")); // mother must have been 19 when the child was born if (DateOfBirthChild.Year < WifePersonRow.DateOfBirth.Value.Year + 19) { continue; } GeneratePersonRecord(RecordNode, familyRecord, "Child" + (countChild + 1).ToString(), MainDS); } } GenerateAddressForFamily(RecordNode, familyRecord, MainDS); GenerateCommitmentRecord(RecordNode, familyRecord, MainDS, PersonnelDS, FieldKeys); GenerateBankDetails(RecordNode, familyRecord, MainDS, BankKeys); if (MainDS.PFamily.Rows.Count % 100 == 0) { TLogging.Log("created worker " + MainDS.PFamily.Rows.Count.ToString() + " " + familyRecord.FamilyName); } RecordNode = RecordNode.NextSibling; } MainDS.ThrowAwayAfterSubmitChanges = true; PartnerEditTDSAccess.SubmitChanges(MainDS); PersonnelDS.ThrowAwayAfterSubmitChanges = true; PersonnelTDSAccess.SubmitChanges(PersonnelDS); TLogging.Log("after saving workers"); }
/// <summary> /// return an XmlDocument with all partner info; /// the partners are grouped by class, country, status, and sitekey /// </summary> /// <returns></returns> public static string ExportPartners() { PartnerEditTDS MainDS = new PartnerEditTDS(); LoadDataFromDB(ref MainDS); // Group partners into categories. // // A partner's category is defined by his: class, country, status, and sitekey // It is stored as a string e.g. "FAMILY,DE,ACTIVE,0". // SortedList <string, List <long> > PartnerCategories = GroupPartnersIntoCategories(MainDS); // create XML structure for each category XmlDocument PartnerData = TYml2Xml.CreateXmlDocument(); XmlNode rootNode = PartnerData.FirstChild.NextSibling; Int32 groupCounter = 0; foreach (string category in PartnerCategories.Keys) { // get category data groupCounter++; XmlElement groupNode = PartnerData.CreateElement("PartnerGroup" + groupCounter.ToString()); rootNode.AppendChild(groupNode); Int32 partnerCounter = 0; string[] categoryDetails = category.Split(new char[] { ',' }); // may want to skip the categories with sitekey = -1 // right now, we still export them and ignore the partners 0 and 1000000 later groupNode.SetAttribute("class", categoryDetails[0]); groupNode.SetAttribute("Country", categoryDetails[1]); groupNode.SetAttribute("status", categoryDetails[2]); groupNode.SetAttribute("SiteKey", categoryDetails[3]); List <long> partnerKeys = PartnerCategories[category]; foreach (long partnerKey in partnerKeys) { if ((partnerKey != 0) && (partnerKey != 1000000)) // skip organization root and the 0 when exporting { MainDS.PPartner.DefaultView.RowFilter = PPartnerTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); PPartnerRow partnerRow = (PPartnerRow)MainDS.PPartner.DefaultView[0].Row; PFamilyRow familyRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { MainDS.PFamily.DefaultView.RowFilter = PFamilyTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); familyRow = (PFamilyRow)MainDS.PFamily.DefaultView[0].Row; } PPersonRow personRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { MainDS.PPerson.DefaultView.RowFilter = PPersonTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); personRow = (PPersonRow)MainDS.PPerson.DefaultView[0].Row; } POrganisationRow organisationRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { MainDS.POrganisation.DefaultView.RowFilter = POrganisationTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); organisationRow = (POrganisationRow)MainDS.POrganisation.DefaultView[0].Row; } PUnitRow unitRow = null; UmUnitStructureRow unitStructureRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { MainDS.PUnit.DefaultView.RowFilter = PUnitTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); unitRow = (PUnitRow)MainDS.PUnit.DefaultView[0].Row; MainDS.UmUnitStructure.DefaultView.RowFilter = UmUnitStructureTable.GetChildUnitKeyDBName() + " = " + partnerKey.ToString(); long numParents = MainDS.UmUnitStructure.DefaultView.Count; if (numParents == 1) { unitStructureRow = (UmUnitStructureRow)MainDS.UmUnitStructure.DefaultView[0].Row; } else { throw new Exception( "Units must have exactly one ParentUnit. " + "The unit with partnerKey " + partnerKey.ToString() + " has " + numParents.ToString() + "."); } } PBankRow BankRow = null; if (partnerRow.PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { MainDS.PBank.DefaultView.RowFilter = PBankTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); BankRow = (PBankRow)MainDS.PBank.DefaultView[0].Row; } partnerCounter++; XmlElement partnerNode = PartnerData.CreateElement("Partner" + partnerCounter.ToString()); groupNode.AppendChild(partnerNode); partnerNode.SetAttribute("PartnerKey", partnerRow.PartnerKey.ToString()); //groupNode.SetAttribute("ShortName", partnerRow.PartnerShortName.ToString()); if (personRow != null) { partnerNode.SetAttribute("FirstName", personRow.FirstName.ToString()); partnerNode.SetAttribute("LastName", personRow.FamilyName.ToString()); partnerNode.SetAttribute("Title", personRow.Title.ToString()); } else if (familyRow != null) { partnerNode.SetAttribute("FirstName", familyRow.FirstName.ToString()); partnerNode.SetAttribute("LastName", familyRow.FamilyName.ToString()); partnerNode.SetAttribute("Title", familyRow.Title.ToString()); } else if (organisationRow != null) { partnerNode.SetAttribute("Name", organisationRow.OrganisationName.ToString()); } else if (unitRow != null) { partnerNode.SetAttribute("Name", unitRow.UnitName.ToString()); partnerNode.SetAttribute("UnitTypeCode", unitRow.UnitTypeCode.ToString()); if (unitStructureRow != null) { partnerNode.SetAttribute("ParentUnitKey", unitStructureRow.ParentUnitKey.ToString()); } } if (BankRow != null) { partnerNode.SetAttribute("BranchName", BankRow.BranchName); partnerNode.SetAttribute("BranchCode", BankRow.BranchCode); partnerNode.SetAttribute("BranchBic", BankRow.Bic); partnerNode.SetAttribute("EpFormatFile", BankRow.EpFormatFile); } partnerNode.SetAttribute("CreatedAt", partnerRow.DateCreated.Value.ToString("yyyy-MM-dd HH:mm:ss")); // special types string specialTypes = ""; MainDS.PPartnerType.DefaultView.RowFilter = PPartnerTypeTable.GetPartnerKeyDBName() + "=" + partnerKey.ToString(); foreach (DataRowView rv in MainDS.PPartnerType.DefaultView) { if (specialTypes.Length > 0) { specialTypes += ", "; } specialTypes += ((PPartnerTypeRow)rv.Row).TypeCode; } if (specialTypes.Length > 0) { partnerNode.SetAttribute("SpecialTypes", specialTypes); } // addresses DataView partnerLocationView = MainDS.PPartnerLocation.DefaultView; partnerLocationView.RowFilter = PPartnerLocationTable.GetPartnerKeyDBName() + " = " + partnerRow.PartnerKey.ToString() + "AND " + PPartnerLocationTable.GetLocationKeyDBName() + " <> 0 "; // ignore invalid addresses Int32 addressCounter = 0; foreach (DataRowView rv in partnerLocationView) { XmlElement addressNode = PartnerData.CreateElement("Address" + (addressCounter > 0 ? addressCounter.ToString() : "")); addressCounter++; partnerNode.AppendChild(addressNode); PPartnerLocationRow partnerLocationRow = (PPartnerLocationRow)rv.Row; DataView locationView = MainDS.PLocation.DefaultView; locationView.RowFilter = PLocationTable.GetSiteKeyDBName() + "=" + partnerLocationRow.SiteKey.ToString() + " AND " + PLocationTable.GetLocationKeyDBName() + "=" + partnerLocationRow.LocationKey.ToString(); if (locationView.Count > 0) { PLocationRow locationRow = (PLocationRow)locationView[0].Row; addressNode.SetAttribute("Street", locationRow.StreetName); addressNode.SetAttribute("City", locationRow.City); addressNode.SetAttribute("PostCode", locationRow.PostalCode); } addressNode.SetAttribute("Email", partnerLocationRow.EmailAddress); addressNode.SetAttribute("Phone", partnerLocationRow.TelephoneNumber); addressNode.SetAttribute("MobilePhone", partnerLocationRow.MobileNumber); } // TODO: notes // TODO: This doesn't export as much data as it should? } } } return(TXMLParser.XmlToString(PartnerData)); }