public static bool SavePartner(PartnerEditTDS AMainDS, List <string> ASubscriptions, List <string> APartnerTypes, bool ASendMail, string ADefaultEmailAddress, string ADefaultPhoneMobile, string ADefaultPhoneLandline, out TVerificationResultCollection AVerificationResult) { List <string> Dummy1, Dummy2; string Dummy3, Dummy4, Dummy5; PartnerEditTDS SaveDS; AVerificationResult = new TVerificationResultCollection(); if (AMainDS.PPartner[0].ModificationId == DateTime.MinValue) { // this is a new partner SaveDS = AMainDS; if (SaveDS.PPartner[0].PartnerKey == -1) { SaveDS.PPartner[0].PartnerKey = NewPartnerKey(); } if (SaveDS.PFamily.Count > 0) { SaveDS.PFamily[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PPerson.Count > 0) { SaveDS.PPerson[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PChurch.Count > 0) { SaveDS.PChurch[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.POrganisation.Count > 0) { SaveDS.POrganisation[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } PPartnerLocationRow partnerlocation = SaveDS.PPartnerLocation.NewRowTyped(); partnerlocation.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerlocation.LocationKey = SaveDS.PLocation[0].LocationKey; partnerlocation.SiteKey = SaveDS.PLocation[0].SiteKey; partnerlocation.SendMail = ASendMail; SaveDS.PPartnerLocation.Rows.Add(partnerlocation); } else { SaveDS = GetPartnerDetails(AMainDS.PPartner[0].PartnerKey, out Dummy1, out Dummy2, out Dummy3, out Dummy4, out Dummy5); DataUtilities.CopyDataSet(AMainDS, SaveDS); } List <string> ExistingPartnerTypes = new List <string>(); foreach (PPartnerTypeRow partnertype in SaveDS.PPartnerType.Rows) { if (!APartnerTypes.Contains(partnertype.TypeCode)) { partnertype.Delete(); } else { ExistingPartnerTypes.Add(partnertype.TypeCode); } } // add new partner types foreach (string partnertype in APartnerTypes) { if (!ExistingPartnerTypes.Contains(partnertype)) { PPartnerTypeRow partnertypeRow = SaveDS.PPartnerType.NewRowTyped(); partnertypeRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; partnertypeRow.TypeCode = partnertype; SaveDS.PPartnerType.Rows.Add(partnertypeRow); } } List <string> ExistingSubscriptions = new List <string>(); foreach (PSubscriptionRow subscription in SaveDS.PSubscription.Rows) { if (!ASubscriptions.Contains(subscription.PublicationCode)) { subscription.Delete(); } else { ExistingSubscriptions.Add(subscription.PublicationCode); } } // add new subscriptions foreach (string subscription in ASubscriptions) { if (!ExistingSubscriptions.Contains(subscription)) { PSubscriptionRow subscriptionRow = SaveDS.PSubscription.NewRowTyped(); subscriptionRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; subscriptionRow.PublicationCode = subscription; subscriptionRow.ReasonSubsGivenCode = "FREE"; SaveDS.PSubscription.Rows.Add(subscriptionRow); } } bool foundDefaultEmailAddress = false; bool foundDefaultPhoneLandLine = false; bool foundDefaultMobileLandLine = false; foreach (PPartnerAttributeRow partnerattr in SaveDS.PPartnerAttribute.Rows) { if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_EMAIL) { partnerattr.Value = ADefaultEmailAddress; foundDefaultEmailAddress = true; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_PHONE) { partnerattr.Value = ADefaultPhoneLandline; foundDefaultPhoneLandLine = true; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_MOBILE_PHONE) { partnerattr.Value = ADefaultPhoneMobile; foundDefaultMobileLandLine = true; } } if (!foundDefaultEmailAddress) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_EMAIL; partnerattr.Value = ADefaultEmailAddress; partnerattr.Index = 0; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } if (!foundDefaultPhoneLandLine) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_PHONE; partnerattr.Value = ADefaultPhoneLandline; partnerattr.Index = 0; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } if (!foundDefaultMobileLandLine) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_MOBILE_PHONE; partnerattr.Value = ADefaultPhoneMobile; partnerattr.Index = 0; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } // TODO: either reuse Partner Edit UIConnector // or check for changed partner key, or changed Partner Class, etc. // set Partner Short Name if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PPerson[0].FamilyName, SaveDS.PPerson[0].Title, SaveDS.PPerson[0].FirstName, SaveDS.PPerson[0].MiddleName1); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { // check if we have a valid family name if (SaveDS.PFamily[0].FamilyName.Trim().Length == 0) { AVerificationResult.Add(new TVerificationResult("error", "Please specify the family name", "", "MaintainPartners.ErrMissingFamilyName", TResultSeverity.Resv_Critical)); return(false); } // check if we have a valid title if (SaveDS.PFamily[0].Title.Trim().Length == 0) { AVerificationResult.Add(new TVerificationResult("error", "Please specify the title", "", "MaintainPartners.ErrMissingTitle", TResultSeverity.Resv_Critical)); return(false); } SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PFamily[0].FamilyName, SaveDS.PFamily[0].Title, SaveDS.PFamily[0].FirstName); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PUnit[0].UnitName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { // check if we have a valid organisation name if (SaveDS.POrganisation[0].OrganisationName.Trim().Length == 0) { AVerificationResult.Add(new TVerificationResult("error", "Please specify the organisation name", "", "MaintainPartners.ErrMissingOrganisationName", TResultSeverity.Resv_Critical)); return(false); } SaveDS.PPartner[0].PartnerShortName = SaveDS.POrganisation[0].OrganisationName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PBank[0].BranchName; } // change legacy addresses. create a new separate location for each partner if (SaveDS.PLocation[0].LocationKey == 0) { PLocationRow location = SaveDS.PLocation.NewRowTyped(); DataUtilities.CopyAllColumnValues(SaveDS.PLocation[0], location); location.SiteKey = DomainManager.GSiteKey; location.LocationKey = -1; SaveDS.PLocation.Rows.Clear(); SaveDS.PLocation.Rows.Add(location); PPartnerLocationRow plocation = SaveDS.PPartnerLocation.NewRowTyped(); DataUtilities.CopyAllColumnValues(SaveDS.PPartnerLocation[0], plocation); plocation.LocationKey = -1; plocation.SiteKey = DomainManager.GSiteKey; SaveDS.PPartnerLocation[0].Delete(); SaveDS.PPartnerLocation.Rows.Add(plocation); } // check if we have a valid country code if (SaveDS.PLocation[0].CountryCode.Trim().Length == 0) { AVerificationResult.Add(new TVerificationResult("error", "The country code is missing", TResultSeverity.Resv_Critical)); return(false); } TDBTransaction Transaction = new TDBTransaction(); bool WrongCountryCode = false; DBAccess.ReadTransaction(ref Transaction, delegate { WrongCountryCode = !PCountryAccess.Exists(SaveDS.PLocation[0].CountryCode, Transaction); }); if (WrongCountryCode) { AVerificationResult.Add(new TVerificationResult("error", "The country code does not match a country", TResultSeverity.Resv_Critical)); return(false); } DataSet ResponseDS = new PartnerEditTDS(); TPartnerEditUIConnector uiconnector = new TPartnerEditUIConnector(SaveDS.PPartner[0].PartnerKey); try { TSubmitChangesResult result = uiconnector.SubmitChanges( ref SaveDS, ref ResponseDS, out AVerificationResult); return(result == TSubmitChangesResult.scrOK); } catch (Exception e) { TLogging.Log(e.ToString()); AVerificationResult.Add(new TVerificationResult("error", e.Message, TResultSeverity.Resv_Critical)); return(false); } }
public static bool SavePartner(PartnerEditTDS AMainDS, List <string> ASubscriptions, List <string> APartnerTypes, bool ASendMail, string ADefaultEmailAddress, string ADefaultPhoneMobile, string ADefaultPhoneLandline, out TVerificationResultCollection AVerificationResult) { List <string> Dummy1, Dummy2; string Dummy3, Dummy4, Dummy5; PartnerEditTDS SaveDS; AVerificationResult = new TVerificationResultCollection(); if (AMainDS.PPartner[0].ModificationId == DateTime.MinValue) { // this is a new partner SaveDS = AMainDS; if (SaveDS.PPartner[0].PartnerKey == -1) { SaveDS.PPartner[0].PartnerKey = NewPartnerKey(); } if (SaveDS.PFamily.Count > 0) { SaveDS.PFamily[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PPerson.Count > 0) { SaveDS.PPerson[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PChurch.Count > 0) { SaveDS.PChurch[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.POrganisation.Count > 0) { SaveDS.POrganisation[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } PPartnerLocationRow partnerlocation = SaveDS.PPartnerLocation.NewRowTyped(); partnerlocation.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerlocation.LocationKey = SaveDS.PLocation[0].LocationKey; partnerlocation.SiteKey = SaveDS.PLocation[0].SiteKey; partnerlocation.SendMail = ASendMail; SaveDS.PPartnerLocation.Rows.Add(partnerlocation); } else { SaveDS = GetPartnerDetails(AMainDS.PPartner[0].PartnerKey, out Dummy1, out Dummy2, out Dummy3, out Dummy4, out Dummy5); DataUtilities.CopyDataSet(AMainDS, SaveDS); } List <string> ExistingPartnerTypes = new List <string>(); foreach (PPartnerTypeRow partnertype in SaveDS.PPartnerType.Rows) { if (!APartnerTypes.Contains(partnertype.TypeCode)) { partnertype.Delete(); } else { ExistingPartnerTypes.Add(partnertype.TypeCode); } } // add new partner types foreach (string partnertype in APartnerTypes) { if (!ExistingPartnerTypes.Contains(partnertype)) { PPartnerTypeRow partnertypeRow = SaveDS.PPartnerType.NewRowTyped(); partnertypeRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; partnertypeRow.TypeCode = partnertype; SaveDS.PPartnerType.Rows.Add(partnertypeRow); } } List <string> ExistingSubscriptions = new List <string>(); foreach (PSubscriptionRow subscription in SaveDS.PSubscription.Rows) { if (!ASubscriptions.Contains(subscription.PublicationCode)) { subscription.Delete(); } else { ExistingSubscriptions.Add(subscription.PublicationCode); } } // add new subscriptions foreach (string subscription in ASubscriptions) { if (!ExistingSubscriptions.Contains(subscription)) { PSubscriptionRow subscriptionRow = SaveDS.PSubscription.NewRowTyped(); subscriptionRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; subscriptionRow.PublicationCode = subscription; subscriptionRow.ReasonSubsGivenCode = "FREE"; SaveDS.PSubscription.Rows.Add(subscriptionRow); } } bool foundDefaultEmailAddress = false; bool foundDefaultPhoneLandLine = false; bool foundDefaultMobileLandLine = false; foreach (PPartnerAttributeRow partnerattr in SaveDS.PPartnerAttribute.Rows) { if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_EMAIL) { partnerattr.Value = ADefaultEmailAddress; foundDefaultEmailAddress = true; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_PHONE) { partnerattr.Value = ADefaultPhoneLandline; foundDefaultPhoneLandLine = true; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_MOBILE_PHONE) { partnerattr.Value = ADefaultPhoneMobile; foundDefaultMobileLandLine = true; } } if (!foundDefaultEmailAddress) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_EMAIL; partnerattr.Value = ADefaultEmailAddress; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } if (!foundDefaultPhoneLandLine) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_PHONE; partnerattr.Value = ADefaultPhoneLandline; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } if (!foundDefaultMobileLandLine) { PPartnerAttributeRow partnerattr = SaveDS.PPartnerAttribute.NewRowTyped(); partnerattr.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerattr.AttributeType = MPartnerConstants.ATTR_TYPE_MOBILE_PHONE; partnerattr.Value = ADefaultPhoneMobile; SaveDS.PPartnerAttribute.Rows.Add(partnerattr); } // TODO: either reuse Partner Edit UIConnector // or check for changed partner key, or changed Partner Class, etc. // set Partner Short Name if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PPerson[0].FamilyName, SaveDS.PPerson[0].Title, SaveDS.PPerson[0].FirstName, SaveDS.PPerson[0].MiddleName1); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PFamily[0].FamilyName, SaveDS.PFamily[0].Title, SaveDS.PFamily[0].FirstName); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PUnit[0].UnitName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { SaveDS.PPartner[0].PartnerShortName = SaveDS.POrganisation[0].OrganisationName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PBank[0].BranchName; } // TODO: check if location 0 (no address) was changed. we don't want to overwrite that // alternative: check if somebody else uses that location, and split the locations. or ask if others should be updated??? if (SaveDS.PLocation[0].RowState == DataRowState.Modified && SaveDS.PLocation[0].LocationKey == 0) { TLogging.Log("we cannot update addresses of people with location 0"); AVerificationResult.Add(new TVerificationResult("error", "we cannot update addresses of people with location 0", TResultSeverity.Resv_Critical)); return(false); } DataSet ResponseDS = new PartnerEditTDS(); TPartnerEditUIConnector uiconnector = new TPartnerEditUIConnector(SaveDS.PPartner[0].PartnerKey); try { TSubmitChangesResult result = uiconnector.SubmitChanges( ref SaveDS, ref ResponseDS, out AVerificationResult); return(result == TSubmitChangesResult.scrOK); } catch (Exception e) { TLogging.Log(e.ToString()); AVerificationResult.Add(new TVerificationResult("error", e.Message, TResultSeverity.Resv_Critical)); return(false); } }
public static bool SavePartner(PartnerEditTDS AMainDS, List <string> ASubscriptions, List <string> APartnerTypes) { List <string> Dummy1, Dummy2; string Dummy3, Dummy4, Dummy5; PartnerEditTDS SaveDS; if (AMainDS.PPartner[0].ModificationId == DateTime.MinValue) { // this is a new partner SaveDS = AMainDS; if (SaveDS.PPartner[0].PartnerKey == -1) { SaveDS.PPartner[0].PartnerKey = NewPartnerKey(); } if (SaveDS.PFamily.Count > 0) { SaveDS.PFamily[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PPerson.Count > 0) { SaveDS.PPerson[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.PChurch.Count > 0) { SaveDS.PChurch[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } else if (SaveDS.POrganisation.Count > 0) { SaveDS.POrganisation[0].PartnerKey = SaveDS.PPartner[0].PartnerKey; } PPartnerLocationRow partnerlocation = SaveDS.PPartnerLocation.NewRowTyped(); partnerlocation.PartnerKey = SaveDS.PPartner[0].PartnerKey; partnerlocation.LocationKey = SaveDS.PLocation[0].LocationKey; partnerlocation.SiteKey = SaveDS.PLocation[0].SiteKey; SaveDS.PPartnerLocation.Rows.Add(partnerlocation); } else { SaveDS = GetPartnerDetails(AMainDS.PPartner[0].PartnerKey, out Dummy1, out Dummy2, out Dummy3, out Dummy4, out Dummy5); DataUtilities.CopyDataSet(AMainDS, SaveDS); } List <string> ExistingPartnerTypes = new List <string>(); foreach (PPartnerTypeRow partnertype in SaveDS.PPartnerType.Rows) { if (!APartnerTypes.Contains(partnertype.TypeCode)) { partnertype.Delete(); } else { ExistingPartnerTypes.Add(partnertype.TypeCode); } } // add new partner types foreach (string partnertype in APartnerTypes) { if (!ExistingPartnerTypes.Contains(partnertype)) { PPartnerTypeRow partnertypeRow = SaveDS.PPartnerType.NewRowTyped(); partnertypeRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; partnertypeRow.TypeCode = partnertype; SaveDS.PPartnerType.Rows.Add(partnertypeRow); } } List <string> ExistingSubscriptions = new List <string>(); foreach (PSubscriptionRow subscription in SaveDS.PSubscription.Rows) { if (!ASubscriptions.Contains(subscription.PublicationCode)) { subscription.Delete(); } else { ExistingSubscriptions.Add(subscription.PublicationCode); } } // add new subscriptions foreach (string subscription in ASubscriptions) { if (!ExistingSubscriptions.Contains(subscription)) { PSubscriptionRow subscriptionRow = SaveDS.PSubscription.NewRowTyped(); subscriptionRow.PartnerKey = AMainDS.PPartner[0].PartnerKey; subscriptionRow.PublicationCode = subscription; subscriptionRow.ReasonSubsGivenCode = "FREE"; SaveDS.PSubscription.Rows.Add(subscriptionRow); } } // TODO: either reuse Partner Edit UIConnector // or check for changed partner key, or changed Partner Class, etc. // set Partner Short Name if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_PERSON) { SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PPerson[0].FamilyName, SaveDS.PPerson[0].Title, SaveDS.PPerson[0].FirstName, SaveDS.PPerson[0].MiddleName1); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_FAMILY) { SaveDS.PPartner[0].PartnerShortName = Calculations.DeterminePartnerShortName( SaveDS.PFamily[0].FamilyName, SaveDS.PFamily[0].Title, SaveDS.PFamily[0].FirstName); } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_UNIT) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PUnit[0].UnitName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_ORGANISATION) { SaveDS.PPartner[0].PartnerShortName = SaveDS.POrganisation[0].OrganisationName; } else if (SaveDS.PPartner[0].PartnerClass == MPartnerConstants.PARTNERCLASS_BANK) { SaveDS.PPartner[0].PartnerShortName = SaveDS.PBank[0].BranchName; } // TODO: check if location 0 (no address) was changed. we don't want to overwrite that // alternative: check if somebody else uses that location, and split the locations. or ask if others should be updated??? if (SaveDS.PLocation[0].RowState == DataRowState.Modified && SaveDS.PLocation[0].LocationKey == 0) { TLogging.Log("we cannot update addresses of people with location 0"); return(false); } PartnerEditTDSAccess.SubmitChanges(SaveDS); return(true); }