/// <summary> /// todoComment /// </summary> /// <param name="AAddedOrChangedPromotionDT"></param> /// <param name="AParameterDT"></param> public void AddressAddedOrChangedProcessing(PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddedOrChangedPromotionDT, PartnerAddressAggregateTDSChangePromotionParametersTable AParameterDT) { if (FCurrentModuleTabGroup == TPartnerEditScreenLogic.TModuleTabGroupEnum.mtgPartner) { if (!ucoPartnerTabSet.IsDynamicallyLoadableTabSetUp(TUC_PartnerEdit_PartnerTabSet.TDynamicLoadableUserControls.dlucAddresses)) { // The follwing function calls internally 'DynamicLoadUserControl(TDynamicLoadableUserControls.dlucAddresses);' ucoPartnerTabSet.SetUpPartnerAddressTab(); } ucoPartnerTabSet.ProcessServerResponseAddressAddedOrChanged(AAddedOrChangedPromotionDT, AParameterDT); } }
/// <summary> /// This procedure creates the colums of the DataGrid displayed /// /// </summary> /// <returns>void</returns> public void CreateColumns(TSgrdDataGrid AGrid, System.Data.DataTable ASourceTable) { this.DataGrid = AGrid; this.FDataGrid.AddTextColumn("Short Name", ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerShortNameDBName()], 240); this.FDataGrid.AddTextColumn("Partner Key", ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerKeyDBName()], 77); this.FDataGrid.AddTextColumn("Partner Class", ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerClassDBName()], 83); this.FDataGrid.AddTextColumn("Telephone", ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetTelephoneNumberDBName()], 110); this.FDataGrid.AddTextColumn("Location Type", ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationTypeDBName()], 88); }
/// <summary> /// Called if the PetraServer responds on added Address(es) that was/were /// submitted in a call to the UIConnector's SubmitChanges function. /// /// The PetraServer found out that the Address(es) is/are added to a Partner of /// Partner Class FAMILY and that this FAMILY has got Family Members. The user /// needs to decide whether the Address(es) should be added to all members of /// the family. /// The user's answer is stored in the AAddedOrChangedPromotionDT DataTable for /// each Address. Eventually this DataTable is sent back to the PetraServer for /// further evaluation and action. /// /// </summary> /// <param name="AAddedOrChangedPromotionDT">DataTable containing parameter data that /// needs to be processed</param> /// <param name="AParameterDT">DataTable containing detail data for each record in /// AAddedOrChangedPromotionDT /// </param> /// <returns>void</returns> public void ProcessServerResponseAddressAddedOrChanged( PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddedOrChangedPromotionDT, PartnerAddressAggregateTDSChangePromotionParametersTable AParameterDT) { PLocationRow LocationRow; PLocationTable LocationDT; System.Windows.Forms.DialogResult AddressAddedPromotionDialogResult; int Counter; PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow AddressAddedOrChangedPromotionRow; string FilterCriteria; #if TODO DataView PersonsLocationsDV; #endif DataView PartnerSharingLocationDV; TFrmPartnerAddressChangePropagationDialog AddressChangedDialog; string UserAnswer; #if TODO TPartnerLocationChangePropagationSelectionWinForm LocationChangedDialog; #endif for (Counter = 0; Counter <= AAddedOrChangedPromotionDT.Rows.Count - 1; Counter += 1) { AddressAddedOrChangedPromotionRow = (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow)AAddedOrChangedPromotionDT.Rows[Counter]; if (!AddressAddedOrChangedPromotionRow.AnswerProcessedClientSide) { if (AddressAddedOrChangedPromotionRow.LocationAdded) { LocationRow = (PLocationRow)FMainDS.PLocation.Rows.Find(new Object[] { AddressAddedOrChangedPromotionRow.SiteKey, AddressAddedOrChangedPromotionRow.LocationKey }); if (LocationRow != null) { LocationDT = (PLocationTable)LocationRow.Table; AddressAddedPromotionDialogResult = MessageBox.Show( Catalog.GetString("You have added the following address to this family:") + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnLocality, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnStreetName, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnAddress3, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnCity, LocationRow) + ' ' + TSaveConvert.StringColumnToString(LocationDT.ColumnPostalCode, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnCounty, LocationRow) + ' ' + TSaveConvert.StringColumnToString(LocationDT.ColumnCountryCode, LocationRow) + "\r\n" + "\r\n" + Catalog.GetString("Do you want to add this address to all members\r\nof this family?"), Catalog.GetString("Add Address to Family Members?"), MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (AddressAddedPromotionDialogResult == System.Windows.Forms.DialogResult.Yes) { AddressAddedOrChangedPromotionRow.UserAnswer = "YES"; } else { AddressAddedOrChangedPromotionRow.UserAnswer = "NO"; } } else { MessageBox.Show( "Error in " + this.GetType().FullName + ".AddressAddedOrChangedProcessing (LocationAdded): " + "Location with SiteKey " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " and LocationKey " + AddressAddedOrChangedPromotionRow.LocationKey.ToString() + " could not be found on the Client side!"); AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; } } else if (AddressAddedOrChangedPromotionRow.LocationChange) { if (AParameterDT != null) { FilterCriteria = PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyDBName() + " = " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyDBName() + " = " + AddressAddedOrChangedPromotionRow.LocationKey.ToString(); // MessageBox.Show('FilterCriteria: ' + FilterCriteria); #if TODO #endif LocationRow = (PLocationRow)FMainDS.PLocation.Rows.Find(new Object[] { AddressAddedOrChangedPromotionRow.SiteKey, AddressAddedOrChangedPromotionRow.LocationKey }); if (LocationRow != null) { PartnerSharingLocationDV = new DataView(AParameterDT, FilterCriteria, PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerKeyDBName() + " ASC", DataViewRowState.CurrentRows); AddressChangedDialog = new TFrmPartnerAddressChangePropagationDialog(FindForm()); AddressChangedDialog.SetParameters(AddressAddedOrChangedPromotionRow, PartnerSharingLocationDV, LocationRow, "", ""); if (AddressChangedDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; // get AddressChangedDialog out of memory AddressChangedDialog.Dispose(); // MessageBox.Show('AddressChangedDialog: pressed Cancel.'); } else { if (AddressChangedDialog.GetReturnedParameters(out UserAnswer)) { AddressAddedOrChangedPromotionRow.UserAnswer = UserAnswer; #if TODO #endif if (AddressAddedOrChangedPromotionRow.UserAnswer.StartsWith("CHANGE")) { /* * The LocationRow gets deleted from the LocationTable on the * Server side, but there a AcceptChanges is done so that the * DataRow doesn't actually get deleted from the DB. The Client * would then no longer know that it needs to delete it, so we * need do remember to do it later! */ AddCleanupAddressesLocationKey((Int32)AddressAddedOrChangedPromotionRow.LocationKey); } } else { throw new System.Exception( "GetReturnedParameters called, but Form '" + AddressChangedDialog.Name + "' is not finished yet with initialisation"); } // get NewPartnerDialog out of memory AddressChangedDialog.Dispose(); #if TODO #endif } } else { MessageBox.Show( "Error in " + this.GetType().FullName + ".AddressAddedOrChangedProcessing (LocationChange): " + "Location with SiteKey " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " and LocationKey " + AddressAddedOrChangedPromotionRow.LocationKey.ToString() + " could not be found on the Client side!"); AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; } } else { throw new System.ArgumentException("AParameterDT must not be nil when LocationChange = true"); } } else if (AddressAddedOrChangedPromotionRow.PartnerLocationChange) { if (AParameterDT != null) { #if TODO FilterCriteria = PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyOfEditedRecordDBName() + " = " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyOfEditedRecordDBName() + " = " + AddressAddedOrChangedPromotionRow.LocationKey.ToString(); // MessageBox.Show('FilterCriteria: ' + FilterCriteria); #endif LocationRow = (PLocationRow)FMainDS.PLocation.Rows.Find(new Object[] { AddressAddedOrChangedPromotionRow.SiteKey, AddressAddedOrChangedPromotionRow.LocationKey }); if (LocationRow == null) { /* * Location not found with PK -> check whether any Location has a PK * with the Original PK values that we are looking for (this is needed * just in the case the Address was Edited, a different Address was * found by the user (therefore the PK changes) and a PartnerLocation * field was changed). */ LocationRow = FindLocationRowWithOriginalKey(new TLocationPK(AddressAddedOrChangedPromotionRow.SiteKey, (Int32)AddressAddedOrChangedPromotionRow.LocationKey)); } if (LocationRow != null) { #if TODO PersonsLocationsDV = new DataView(AParameterDT, FilterCriteria, PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerKeyDBName() + " ASC", DataViewRowState.CurrentRows); LocationChangedDialog = new TPartnerLocationChangePropagationSelectionWinForm(); LocationChangedDialog.SetParameters(AddressAddedOrChangedPromotionRow, PersonsLocationsDV, LocationRow, "", ""); if (LocationChangedDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; // get LocationChangedDialog out of memory LocationChangedDialog.Dispose(); // MessageBox.Show('LocationChangedDialog: pressed Cancel.'); } else { if (LocationChangedDialog.GetReturnedParameters(out UserAnswer)) { AddressAddedOrChangedPromotionRow.UserAnswer = UserAnswer; #endif AddressAddedOrChangedPromotionRow.UserAnswer = "NO"; // TODO Remove this assignment once the code lines immediately above are no longer in compiler directive '#if Todo'! #if TODO } else { throw new System.Exception( "GetReturnedParameters called, but Form '" + LocationChangedDialog.Name + "' is not finished yet with initialisation"); } // get NewPartnerDialog out of memory LocationChangedDialog.Dispose(); } #endif } else { MessageBox.Show( "Error in " + this.GetType().FullName + ".AddressAddedOrChangedProcessing (PartnerLocationChange): " + "Location with SiteKey " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " and LocationKey " + AddressAddedOrChangedPromotionRow.LocationKey.ToString() + " could not be found on the Client side!"); AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; } } else { throw new System.ArgumentException("AParameterDT must not be nil when PartnerLocationChange = true"); } } } } }
/// <summary> /// todoComment /// </summary> /// <param name="AAddedOrChangedPromotionDT"></param> /// <param name="AParameterDT"></param> public void ProcessServerResponseAddressAddedOrChanged( PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddedOrChangedPromotionDT, PartnerAddressAggregateTDSChangePromotionParametersTable AParameterDT) { if (!FTabSetup.ContainsKey(TDynamicLoadableUserControls.dlucAddresses)) { // The follwing function calls internally 'DynamicLoadUserControl(TDynamicLoadableUserControls.dlucAddresses);' SetupUserControlAddresses(); } FUcoAddresses.ProcessServerResponseAddressAddedOrChanged(AAddedOrChangedPromotionDT, AParameterDT); }
/// <summary> /// todoComment /// </summary> /// <param name="ALocationRow"></param> /// <param name="APartnerKey"></param> /// <param name="AAddressAddedOrChangedPromotionDT"></param> /// <param name="AReadTransaction"></param> /// <param name="AUpdateLocation"></param> /// <param name="ACreateLocation"></param> /// <param name="ACreateLocationOtherPartnerKeys"></param> /// <param name="AChangePromotionParametersDT"></param> /// <returns></returns> private static Boolean CheckLocationChange(PLocationRow ALocationRow, Int64 APartnerKey, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedOrChangedPromotionDT, TDBTransaction AReadTransaction, out Boolean AUpdateLocation, out Boolean ACreateLocation, out Int64[] ACreateLocationOtherPartnerKeys, out PartnerAddressAggregateTDSChangePromotionParametersTable AChangePromotionParametersDT) { Boolean ReturnValue; PartnerAddressAggregateTDSChangePromotionParametersRow AddressAddedPromotionRow; ACreateLocation = false; AUpdateLocation = false; ACreateLocationOtherPartnerKeys = null; AChangePromotionParametersDT = null; // TLogging.LogAtLevel(9, "CheckLocationChange for Location " + ALocationRow.LocationKey.ToString() + ": AAddressAddedOrChangedPromotionDT.Rows.Count: " + // AAddressAddedOrChangedPromotionDT.Rows.Count.ToString()); // Check if there is a Parameter Row for the LocationKey we are looking at DataView AddressAddedOrChangedPromotionDV = new DataView(AAddressAddedOrChangedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + ALocationRow.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + ALocationRow.LocationKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationChangeDBName() + " = true", "", DataViewRowState.CurrentRows); // No, there isn't one therefore create one if (AddressAddedOrChangedPromotionDV.Count == 0) { // TLogging.LogAtLevel(9, "CheckLocationChange: Location " + ALocationRow.LocationKey.ToString() + // ": Location has been changed and is referenced by other Partners!"); AAddressAddedOrChangedPromotionDT = new PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable( MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME); PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow AddressAddedOrChangedRow = AAddressAddedOrChangedPromotionDT.NewRowTyped(false); AddressAddedOrChangedRow.SiteKey = ALocationRow.SiteKey; AddressAddedOrChangedRow.LocationKey = ALocationRow.LocationKey; AddressAddedOrChangedRow.PartnerKey = APartnerKey; AddressAddedOrChangedRow.LocationChange = true; AddressAddedOrChangedRow.LocationAdded = false; AddressAddedOrChangedRow.AnswerProcessedClientSide = false; AddressAddedOrChangedRow.AnswerProcessedServerSide = false; AAddressAddedOrChangedPromotionDT.Rows.Add(AddressAddedOrChangedRow); #region Build ChangePromotionParameters DataTable AChangePromotionParametersDT = new PartnerAddressAggregateTDSChangePromotionParametersTable( MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME); // Load data for all other Partners that reference the PartnerLocation OdbcParameter[] ParametersArray = new OdbcParameter[3]; ParametersArray[0] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[0].Value = (System.Object)(APartnerKey); ParametersArray[1] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[1].Value = (System.Object)(ALocationRow.SiteKey); ParametersArray[2] = new OdbcParameter("", OdbcType.Int); ParametersArray[2].Value = (System.Object)(ALocationRow.LocationKey); DataTable OtherPartnerLocationReferencesDT = DBAccess.GDBAccessObj.SelectDT( "SELECT PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetPartnerKeyDBName() + ", " + PPartnerTable.GetPartnerShortNameDBName() + ", " + PPartnerTable.GetPartnerClassDBName() + ", " + PPartnerLocationTable.GetTelephoneNumberDBName() + ", " + PPartnerLocationTable.GetLocationTypeDBName() + ' ' + "FROM PUB_" + PPartnerTable.GetTableDBName() + " INNER JOIN PUB_" + PPartnerLocationTable.GetTableDBName() + " ON PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " = PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetPartnerKeyDBName() + ' ' + "WHERE PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetPartnerKeyDBName() + " <> ? " + "AND " + PPartnerLocationTable.GetSiteKeyDBName() + " = ? " + "AND " + PPartnerLocationTable.GetLocationKeyDBName() + " = ?", "OtherPartnerLocationReferencesDT", AReadTransaction, ParametersArray); // Don't need these columns for the moment, but it would be nice to have them later on // PPartnerLocationTable.GetSendMailDBName + ', ' + // PPartnerLocationTable.GetDateEffectiveDBName + ', ' + // PPartnerLocationTable.GetDateGoodUntilDBName + ', ' + // Insert data into the ChangePromotionParameters DataTable for (int Counter = 0; Counter <= OtherPartnerLocationReferencesDT.Rows.Count - 1; Counter += 1) { DataRow OtherPartnerLocationReferenceRow = OtherPartnerLocationReferencesDT.Rows[Counter]; AddressAddedPromotionRow = AChangePromotionParametersDT.NewRowTyped(false); AddressAddedPromotionRow.SiteKey = ALocationRow.SiteKey; AddressAddedPromotionRow.LocationKey = (Int32)ALocationRow.LocationKey; AddressAddedPromotionRow.PartnerKey = Convert.ToInt64( OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetPartnerKeyDBName()]); AddressAddedPromotionRow.PartnerShortName = OtherPartnerLocationReferenceRow[PPartnerTable.GetPartnerShortNameDBName()].ToString(); AddressAddedPromotionRow.PartnerClass = OtherPartnerLocationReferenceRow[PPartnerTable.GetPartnerClassDBName()].ToString(); // AddressAddedPromotionRow.SendMail := // Convert.ToBoolean(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetSendMailDBName]); // if not OtherPartnerLocationReferenceRow.IsNull( // PPartnerLocationTable.GetDateEffectiveDBName) then // begin // AddressAddedPromotionRow.DateEffective := // Convert.ToDateTime(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetDateEffectiveDBName]); // end; // if not OtherPartnerLocationReferenceRow.IsNull( // PPartnerLocationTable.GetDateGoodUntilDBName) then // begin // AddressAddedPromotionRow.DateGoodUntil := // Convert.ToDateTime(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetDateGoodUntilDBName]); // end; AddressAddedPromotionRow.LocationType = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetLocationTypeDBName()].ToString(); AChangePromotionParametersDT.Rows.Add(AddressAddedPromotionRow); } // TLogging.LogAtLevel(9, "CheckLocationChange: Location " + ALocationRow.LocationKey.ToString() + ": inserted PartnerLocation data of " + // AChangePromotionParametersDT.Rows.Count.ToString() + " other Partners that reference this Location into AChangePromotionParametersDT!"); #endregion ReturnValue = true; } else { // AAddressAddedOrChangedPromotionDT was passed in, holding parameters for the LocationKey we are looking at PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow AddressAddedOrChangedRow = (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow)AddressAddedOrChangedPromotionDV[0].Row; if (AddressAddedOrChangedRow.UserAnswer == "CHANGE-NONE") { // TLogging.LogAtLevel(9, "CheckLocationChange: AAddressAddedOrChangedPromotionDT tells me to CREATE the Location."); ACreateLocation = true; // Signal to calling procedure that the created location should not be // assigned to any Partner other than the one we are currently processing. ACreateLocationOtherPartnerKeys = new Int64[0]; AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else if (AddressAddedOrChangedRow.UserAnswer.StartsWith("CHANGE-SOME")) { // TLogging.LogAtLevel(9, "CheckLocationChange: AAddressAddedOrChangedPromotionDT tells me to CREATE the Location and assign it to selected partners."); ACreateLocation = true; // Parse the UserAnswer. It's format is 'CHANGESOME:PartnerKey1;PartnerKey2;PartnerKeyN' string[] ChangeSomeArray = AddressAddedOrChangedRow.UserAnswer.Split(":,".ToCharArray()); // Build the ACreateLocationOtherPartnerKeys array from it to // signal to calling procedure that the created location should be // assigned to all the Partners contained in the Array. ACreateLocationOtherPartnerKeys = new Int64[ChangeSomeArray.Length - 1]; for (int Counter = 1; Counter <= ChangeSomeArray.Length - 1; Counter += 1) { ACreateLocationOtherPartnerKeys[Counter - 1] = Convert.ToInt64(ChangeSomeArray[Counter]); } AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else if (AddressAddedOrChangedRow.UserAnswer == "CHANGE-ALL") { // TLogging.LogAtLevel(9, "CheckLocationChange: AAddressAddedOrChangedPromotionDT tells me to UPDATE the Location."); AUpdateLocation = true; AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else { // TLogging.LogAtLevel(9, "CheckLocationChange: AAddressAddedOrChangedPromotionDT tells me to CANCEL the changing of the Location."); AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = false; } } return ReturnValue; }
/// <summary> /// Check each PartnerLocation DataRow before calling SubmitChanges /// to enforce Business Rules: /// - Added PartnerLocation: /// - if working with a PartnerLocation of a FAMILY: /// - Added PartnerLocation: if working with a Location of a FAMILY: allow /// choosing whether this PartnerLocation should be added to all PERSONs /// in the FAMILY /// - make sure that Location 0 is no longer mapped to this Partner. /// - Modified Location: /// - if working with a PartnerLocation of a FAMILY: /// - check whether other Partners are referencing it, and if so, /// allow choosing which of the Partners (or none or all) should be /// affected by the change /// - if the value in the DateGoodUntil column has changed, silently /// update it for all PERSONs of a FAMILY that have the same LocationKey. /// - Deleted PartnerLocation: check whether this is the last /// PartnerLocation that is left for this Partner. If this is the case, /// don't delete the PartnerLocation, but set it's LocationKey to 0. /// </summary> private static TSubmitChangesResult ProcessPartnerLocationChanges( PPartnerLocationTable PartnerLocationTable, ref PartnerAddressAggregateTDS AResponseDS, TDBTransaction ASubmitChangesTransaction, Int64 APartnerKey, String APartnerClass, ref TLocationPK[, ] ASimilarLocationReUseKeyMapping, ref PartnerAddressAggregateTDSSimilarLocationParametersTable AExistingLocationParametersDT, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedOrChangedPromotionParametersDT, ref PartnerAddressAggregateTDSChangePromotionParametersTable AChangeLocationParametersDT, ref TVerificationResultCollection AVerificationResult) { TSubmitChangesResult Result = TSubmitChangesResult.scrOK; TSubmitChangesResult TmpResult; for (Int16 PartnerLocationCounter = 0; PartnerLocationCounter <= PartnerLocationTable.Rows.Count - 1; PartnerLocationCounter += 1) { switch (PartnerLocationTable.Rows[PartnerLocationCounter].RowState) { case DataRowState.Added: if (PartnerLocationTable[PartnerLocationCounter].LocationKey != 0) { /* * PartnerLocation of a FAMILY: Family Members promotion */ if (APartnerClass == SharedTypes.PartnerClassEnumToString(TPartnerClass.FAMILY)) { bool PerformPropagation = false; TmpResult = PerformLocationFamilyMemberPropagationChecks( PartnerLocationTable[PartnerLocationCounter], ref AResponseDS, ASubmitChangesTransaction, APartnerKey, APartnerClass, ref AAddressAddedOrChangedPromotionParametersDT, ref PartnerLocationTable, AExistingLocationParametersDT, ASimilarLocationReUseKeyMapping, out PerformPropagation, ref AVerificationResult); if (TmpResult != TSubmitChangesResult.scrOK) { Result = TmpResult; if (TmpResult == TSubmitChangesResult.scrError) { return TmpResult; } } if (PerformPropagation) { ModifyAddressAddedOrChangedParameters(PartnerLocationTable[PartnerLocationCounter], ref AAddressAddedOrChangedPromotionParametersDT); } } /* * Since a new Location has been added, we need to make sure that * Location 0 is no longer mapped to this Partner! */ MakeSureLocation0IsNotPresent(APartnerKey, PartnerLocationTable[PartnerLocationCounter].SiteKey, PartnerLocationTable, ASubmitChangesTransaction); } else { MakeSureLocation0SavingIsAllowed(PartnerLocationTable[PartnerLocationCounter], APartnerKey, ASubmitChangesTransaction); } break; case DataRowState.Modified: /* * PartnerLocation of a FAMILY: Family Members promotion */ if (APartnerClass == SharedTypes.PartnerClassEnumToString(TPartnerClass.FAMILY)) { /* * If the value in the DateGoodUntil column has changed, silently * update it for all PERSONs of this FAMILY that have the same * LocationKey. */ if (TSaveConvert.ObjectToDate(PartnerLocationTable[PartnerLocationCounter][PPartnerLocationTable. GetDateGoodUntilDBName(), DataRowVersion.Original]) != TSaveConvert.ObjectToDate(PartnerLocationTable[PartnerLocationCounter][PPartnerLocationTable. GetDateGoodUntilDBName(), DataRowVersion.Current])) { // TLogging.LogAtLevel(8, "SubmitChanges: PartnerLocation of a FAMILY: DateGoodUntil has changed -> promoting change to FAMILY members..."); PromoteToFamilyMembersDateGoodUntilChange(APartnerKey, PartnerLocationTable[PartnerLocationCounter], ASubmitChangesTransaction); } } break; case DataRowState.Deleted: /* * PPartnerLocation must not get deleted if it is the last one of the * Partner, but must get mapped to Location 0 instead! */ // Make sure that Location 0 can never get deleted! if (Convert.ToInt32(PartnerLocationTable[PartnerLocationCounter][PPartnerLocationTable.GetLocationKeyDBName(), DataRowVersion.Original]) != 0) { // Some other Location than Location 0 is about to be deleted! // Check in the in-memory PartnerLocation Table first... DataRow[] ChangePartnerLocationKeyRows = PartnerLocationTable.Select( PPartnerLocationTable.GetPartnerKeyDBName() + " = " + APartnerKey.ToString() + " AND " + PPartnerLocationTable.GetLocationKeyDBName() + " <> " + PartnerLocationTable[PartnerLocationCounter][PPartnerLocationTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString(), "", DataViewRowState.CurrentRows); if (ChangePartnerLocationKeyRows.Length == 0) { // No PPartnerLocation that is not deleted is left in // PartnerLocationTable > now check for deleted ones DataView DeletedPartnerLocationsDV = new DataView(PartnerLocationTable, "", "", DataViewRowState.Deleted); int[] DeletedPartnerLocationKeys = new int[DeletedPartnerLocationsDV.Count]; for (Int16 DeletedPartnerLocationsCounter = 0; DeletedPartnerLocationsCounter <= DeletedPartnerLocationsDV.Count - 1; DeletedPartnerLocationsCounter += 1) { DeletedPartnerLocationKeys[DeletedPartnerLocationsCounter] = Convert.ToInt32(DeletedPartnerLocationsDV[DeletedPartnerLocationsCounter].Row[PPartnerLocationTable. GetLocationKeyDBName(), DataRowVersion.Original ]); } // now check in the DB as well if (!CheckHasPartnerOtherPartnerLocations(DeletedPartnerLocationKeys, APartnerKey, ASubmitChangesTransaction)) { // 'Undelete' DataRow and make it point to Location 0 // (dummy Location) > will get submitted lateron! PartnerLocationTable[PartnerLocationCounter].RejectChanges(); PartnerLocationTable[PartnerLocationCounter].LocationKey = 0; // TLogging.LogAtLevel(8, "SubmitChanges: PPartnerLocation " + // PartnerLocationTable[PartnerLocationCounter][PPartnerLocationTable.GetLocationKeyDBName(), // DataRowVersion.Original].ToString() + ": was last PartnerLocation, so its LocationKey got set to 0 (will be submitted lateron)!"); } } else { // There is at least one PPartnerLocation that is not deleted // left in PartnerLocationTable, so the current PPartnerLocation // can't be the last one > nothing to do. } } else { DataRow[] ChangePartnerLocationKeyRows = PartnerLocationTable.Select( PPartnerLocationTable.GetPartnerKeyDBName() + " = " + APartnerKey.ToString() + " AND " + PPartnerLocationTable.GetLocationKeyDBName() + " = 0 ", "", DataViewRowState.CurrentRows); // TLogging.LogAtLevel(8, "SubmitChanges: ChangePartnerLocationKeyRows Length: " + Convert.ToInt16(ChangePartnerLocationKeyRows.Length).ToString()); if (ChangePartnerLocationKeyRows.Length != 0) { // remove this location because it should not be submitted to the database PartnerLocationTable.Rows.RemoveAt(PartnerLocationCounter); PartnerLocationCounter--; // TLogging.LogAtLevel(8, "SubmitChanges: Extra Location 0 row won''t be submitted lateron"); } } break; case DataRowState.Unchanged: break; default: throw new ArgumentException( "SubmitChanges can only deal with PartnerLocations of DataRowState Added, Modified or Deleted, but not with " + (Enum.GetName(typeof(DataRowState), PartnerLocationTable.Rows[PartnerLocationCounter].RowState))); } } return Result; }
/// <summary> /// Check each Location DataRow before calling SubmitChanges /// to enforce Business Rules: /// - Added or changed Location: check for a similar Location record /// - if no similar Location record exists, save this Location record /// - if a similar Location record exists: allow choosing whether the /// existing one should be used, or this Location record should be saved /// - Changed Location: don't save Location record if the data is actually /// the same than before /// - Deleted Location: delete Location only if no other PartnerLocation /// is referencing it /// - Deleted Location: remove references from any Extracts /// </summary> private static TSubmitChangesResult ProcessLocationChanges( PLocationTable ALocationTable, PPartnerLocationTable APartnerLocationTable, ref PartnerAddressAggregateTDS AResponseDS, TDBTransaction ASubmitChangesTransaction, Int64 APartnerKey, ref PartnerAddressAggregateTDSSimilarLocationParametersTable AExistingLocationParametersDT, ref TLocationPK[, ] ASimilarLocationReUseKeyMapping, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedOrChangedPromotionParametersDT, ref PartnerAddressAggregateTDSChangePromotionParametersTable AChangeLocationParametersDT, ref TVerificationResultCollection AVerificationResult) { TSubmitChangesResult Result = TSubmitChangesResult.scrOK; TSubmitChangesResult TmpResult; for (Int16 LocationCounter = 0; LocationCounter < ALocationTable.Rows.Count; LocationCounter++) { if ((ALocationTable.Rows[LocationCounter].RowState == DataRowState.Added) || (ALocationTable.Rows[LocationCounter].RowState == DataRowState.Modified)) { if (ALocationTable[LocationCounter].LocationKey == 0) { throw new Exception("TPPartnerAddress.ProcessLocationChanges: must not add or modify the empty location"); } } if (ALocationTable.Rows[LocationCounter].RowState == DataRowState.Deleted) { if (Convert.ToInt32(ALocationTable[LocationCounter][PLocationTable.GetLocationKeyDBName(), DataRowVersion.Original]) == 0) { throw new Exception("TPPartnerAddress.ProcessLocationChanges: must not delete the empty location"); } } if (ALocationTable.Rows[LocationCounter].RowState == DataRowState.Added) { bool ReUseSimilarLocation = false; // Check for reuse of a similar location in the DB PLocationRow TmpRow = ALocationTable[LocationCounter]; TmpResult = PerformSimilarLocationReUseChecks( ref TmpRow, ref AResponseDS, ASubmitChangesTransaction, APartnerKey, ref AExistingLocationParametersDT, ref APartnerLocationTable, ref ASimilarLocationReUseKeyMapping, out ReUseSimilarLocation, ref AVerificationResult); // TLogging.LogAtLevel(8, "SubmitChanges: TmpRow.LocationKey after PerformSimilarLocationReUseChecks (1): " + TmpRow.LocationKey.ToString()); if (TmpResult != TSubmitChangesResult.scrOK) { // Stop processing here - we need a decision whether to re-use // an existing Location or not (or the user tried to re-use a // Location that is already used by this Partner, which is a // user error) return TmpResult; } } // DataRowState.Added else if (ALocationTable.Rows[LocationCounter].RowState == DataRowState.Modified) { if (CheckHasLocationChanged(ALocationTable[LocationCounter])) { bool ReUseSimilarLocation = false; // Check for reuse of a similar location in the DB PLocationRow TmpRow = ALocationTable[LocationCounter]; TmpResult = PerformSimilarLocationReUseChecks(ref TmpRow, ref AResponseDS, ASubmitChangesTransaction, APartnerKey, ref AExistingLocationParametersDT, ref APartnerLocationTable, ref ASimilarLocationReUseKeyMapping, out ReUseSimilarLocation, ref AVerificationResult); // TLogging.LogAtLevel(9, "SubmitChanges: TmpRow.LocationKey after PerformSimilarLocationReUseChecks (2): " + TmpRow.LocationKey.ToString()); if (TmpResult != TSubmitChangesResult.scrOK) { // Stop processing here - we need a decision whether to re-use // an existing Location or not (or the user tried to re-use a // Location that is already used by this Partner, which is a // user error) return TmpResult; } if (!ReUseSimilarLocation) { // No similar Location exists, or an existing similar Location // should not be reused if (CheckHasPartnerLocationOtherPartnerReferences(ALocationTable[LocationCounter], APartnerKey, ASubmitChangesTransaction)) { // TLogging.LogAtLevel(9, "SubmitChanges: Location " + ALocationTable[LocationCounter].LocationKey.ToString() + ": is used by other Partners as well."); bool CreateLocationFlag; TLocationPK OriginalLocationKey; TmpResult = PerformLocationChangeChecks(ALocationTable[LocationCounter], APartnerKey, ref AResponseDS, ASubmitChangesTransaction, ref AAddressAddedOrChangedPromotionParametersDT, ref AChangeLocationParametersDT, ref APartnerLocationTable, ref AVerificationResult, out CreateLocationFlag, out OriginalLocationKey); if (TmpResult != TSubmitChangesResult.scrOK) { Result = TmpResult; if (Result == TSubmitChangesResult.scrError) { return Result; } } if (CreateLocationFlag) { ModifyExistingLocationParameters(ALocationTable[LocationCounter], OriginalLocationKey, ref AExistingLocationParametersDT); // Make this location's DataRow undmodified because it should not be submitted to the database ALocationTable.Rows[LocationCounter].AcceptChanges(); LocationCounter--; } } // if CheckHasPartnerLocationOtherPartnerReferences ... then } } // if CheckHasLocationChanged ... then else { // TLogging.LogAtLevel(9, "Location " + ALocationTable[LocationCounter].LocationKey.ToString() + ": data has NOT changed -> will not be saved."); // remove this location because it should not be submitted to the database ALocationTable.Rows.RemoveAt(LocationCounter); LocationCounter--; } } // DataRowState.Modified else if (ALocationTable.Rows[LocationCounter].RowState == DataRowState.Deleted) { // TLogging.LogAtLevel(9, "SubmitChanges: Location " + ALocationTable[LocationCounter] // [PLocationTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString() + ": has been marked for deletion."); // Handle deletion of Location row: delete it only if no other PartnerLocation is referencing it if (CheckHasPartnerLocationOtherPartnerReferences(ALocationTable[LocationCounter], APartnerKey, ASubmitChangesTransaction)) { // TLogging.LogAtLevel(9, TLogging.Log("SubmitChanges: Location " + // ALocationTable[LocationCounter][PLocationTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString() + // ": has been marked for deletion and is used by others, so it won''t get deleted."); // remove this location because it should not be submitted to the database ALocationTable.Rows.RemoveAt(LocationCounter); LocationCounter--; } else { // TLogging.LogAtLevel(9, "SubmitChanges: Location " + ALocationTable[LocationCounter][PLocationTable.GetLocationKeyDBName(), // DataRowVersion.Original].ToString() + ": has been marked for deletion and will get deleted."); // Any Extract in Petra that references this Location must no longer // reference this Location since it will get deleted RemoveLocationFromExtracts(ALocationTable[LocationCounter], ASubmitChangesTransaction); } } // if LocationTable.Rows[LocationCounter].RowState = DataRowState.Deleted else if (ALocationTable.Rows[LocationCounter].RowState != DataRowState.Unchanged) { throw new ArgumentException( "SubmitChanges can only deal with Locations of DataRowState Added, Modified or Deleted, but not with " + (Enum.GetName(typeof(DataRowState), ALocationTable.Rows[LocationCounter].RowState))); } } return Result; }
/// <summary> /// check the location change; validate and take other required action /// eg. change the location of family members, promote address changes /// </summary> /// <param name="ALocationRow"></param> /// <param name="APartnerKey"></param> /// <param name="AResponseDS"></param> /// <param name="ASubmitChangesTransaction"></param> /// <param name="AAddressAddedPromotionDT"></param> /// <param name="AChangeLocationParametersDT"></param> /// <param name="APartnerLocationTable"></param> /// <param name="AVerificationResult"></param> /// <param name="ACreateLocation"></param> /// <param name="AOriginalLocationKey"></param> /// <returns></returns> private static TSubmitChangesResult PerformLocationChangeChecks(PLocationRow ALocationRow, Int64 APartnerKey, ref PartnerAddressAggregateTDS AResponseDS, TDBTransaction ASubmitChangesTransaction, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedPromotionDT, ref PartnerAddressAggregateTDSChangePromotionParametersTable AChangeLocationParametersDT, ref PPartnerLocationTable APartnerLocationTable, ref TVerificationResultCollection AVerificationResult, out Boolean ACreateLocation, out TLocationPK AOriginalLocationKey) { TSubmitChangesResult ReturnValue; DataView PropagateLocationParametersDV; DataView PropagateLocationParametersDV2; Boolean UpdateLocation; Int64[] CreateLocationOtherPartnerKeys; PartnerAddressAggregateTDSChangePromotionParametersTable ChangePromotionParametersDT; PLocationTable NewLocationTable; PLocationRow NewLocationRowSaved; Int32 NewLocationLocationKey; PPartnerLocationRow PartnerLocationRowForChangedLocation; DataSet PartnerLocationModifyDS; int Counter; Int64 OldLocationKey; OdbcParameter[] ParametersArray; String OtherPartnerKeys = ""; AOriginalLocationKey = null; // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: AAddressAddedPromotionDT.Rows.Count: " + AAddressAddedPromotionDT.Rows.Count.ToString()); if (CheckLocationChange(ALocationRow, APartnerKey, ref AAddressAddedPromotionDT, ASubmitChangesTransaction, out UpdateLocation, out ACreateLocation, out CreateLocationOtherPartnerKeys, out ChangePromotionParametersDT)) { // Check if there is a Parameter Row for the LocationKey we are looking at PropagateLocationParametersDV = new DataView(AAddressAddedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + ALocationRow.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + ALocationRow.LocationKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationChangeDBName() + " = true AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetAnswerProcessedClientSideDBName() + " = false", "", DataViewRowState.CurrentRows); if (PropagateLocationParametersDV.Count > 0) { // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Location " + ALocationRow.LocationKey.ToString() + // ": Location has been changed, decision on propagation is needed."); /* * More information is needed (usually via user interaction) * -> stop processing here and return parameters * (usually used for UI interaction) */ if (AResponseDS == null) { // TLogging.LogAtLevel(9, TLogging.Log("PerformLocationChangeChecks: Creating AResponseDS."); AResponseDS = new PartnerAddressAggregateTDS(MPartnerConstants.PARTNERADDRESSAGGREGATERESPONSE_DATASET); } // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: AAddressAddedPromotionDT.Rows.Count: " + AAddressAddedPromotionDT.Rows.Count.ToString()); AResponseDS.Merge(AAddressAddedPromotionDT); // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Merged AAddressAddedPromotionDT into AResponseDS."); AResponseDS.Merge(ChangePromotionParametersDT); // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Merged ChangePromotionParametersDT into AResponseDS."); // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: AResponseDS.Tables[" + MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME + // "].Rows.Count: " + AResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME].Rows.Count.ToString()); return TSubmitChangesResult.scrInfoNeeded; } else { // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: User made his/her choice regarding Location Change promotion; now processing..."); /* * User made his/her choice regarding Location Change promotion; now process it */ if (ACreateLocation) { OldLocationKey = ALocationRow.LocationKey; AOriginalLocationKey = new TLocationPK( Convert.ToInt64(ALocationRow[PLocationTable.GetSiteKeyDBName(), DataRowVersion.Original]), Convert.ToInt32(ALocationRow[PLocationTable.GetLocationKeyDBName(), DataRowVersion.Original])); // ALocationRow.LocationKey; // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Location " + AOriginalLocationKey.LocationKey.ToString() + ": should be created."); /* * Create and save NEW Location that holds the same data than the changed * Location. */ NewLocationTable = new PLocationTable(); NewLocationRowSaved = NewLocationTable.NewRowTyped(false); NewLocationRowSaved.ItemArray = DataUtilities.DestinationSaveItemArray(NewLocationRowSaved, ALocationRow); NewLocationRowSaved.LocationKey = -1; NewLocationTable.Rows.Add(NewLocationRowSaved); // Submit the NEW Location to the DB PLocationAccess.SubmitChanges(NewLocationTable, ASubmitChangesTransaction); // The DB gives us a LocationKey from a Sequence. Remember this one. NewLocationLocationKey = (Int32)NewLocationRowSaved.LocationKey; // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: New Location created! Its Location Key is: " + NewLocationLocationKey.ToString()); // Add the new row to the LocationTable that is beeing processed as well // NewLocationCurrentTableRow := (ALocationRow.Table as PLocationTable).NewRowTyped(false); // NewLocationCurrentTableRow.ItemArray := NewLocationRowSaved.ItemArray; // ALocationRow.Table.Rows.Add(NewLocationCurrentTableRow); // Make the row unchanged so that it isn't picked up as a 'new Address' // and that it doesn't get saved later. Will be sent back to the Partner // Edit screen lateron. // NewLocationCurrentTableRow.AcceptChanges; /* * Update the reference from the changed Location to the new Location in * the Partner's PartnerLocation DataTable. This will be saved later in * the call to SubmitChanges in the main loop of the SubmitData function. */ PartnerLocationRowForChangedLocation = (PPartnerLocationRow)APartnerLocationTable.Rows.Find(new object[] { APartnerKey, ALocationRow.SiteKey, ALocationRow.LocationKey }); PartnerLocationRowForChangedLocation.LocationKey = NewLocationLocationKey; // Now delete the changed Location so that it doesn't get saved! // ALocationRow.Delete; // ALocationRow.AcceptChanges; // Overwrite the Location that should be replaced with the data of the new Location ALocationRow.ItemArray = NewLocationRowSaved.ItemArray; PropagateLocationParametersDV2 = new DataView(AAddressAddedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + NewLocationRowSaved.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + OldLocationKey.ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationChangeDBName() + " = true AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetAnswerProcessedClientSideDBName() + " = true", "", DataViewRowState.CurrentRows); ((PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow)(PropagateLocationParametersDV2[0].Row)).LocationKey = ALocationRow.LocationKey; if (CreateLocationOtherPartnerKeys.Length > 0) { // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Created Location " + NewLocationLocationKey.ToString() + // ": should be assigned to " + Convert.ToInt32(CreateLocationOtherPartnerKeys.Length).ToString() + " Partners..."); // Build list of PartnerKeys for IN (x,y) clause in the SQL statement for (Counter = 0; Counter <= CreateLocationOtherPartnerKeys.Length - 1; Counter += 1) { OtherPartnerKeys = OtherPartnerKeys + CreateLocationOtherPartnerKeys[Counter].ToString() + ','; } // remove last ',' OtherPartnerKeys = OtherPartnerKeys.Substring(0, OtherPartnerKeys.Length - 1); // Load data for all the other selected Partners that reference // the PartnerLocation PartnerLocationModifyDS = new DataSet(); PartnerLocationModifyDS.Tables.Add(new PPartnerLocationTable()); ParametersArray = new OdbcParameter[2]; ParametersArray[0] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[0].Value = (System.Object)(NewLocationRowSaved.SiteKey); ParametersArray[1] = new OdbcParameter("", OdbcType.Int); ParametersArray[1].Value = (System.Object)(AOriginalLocationKey.LocationKey); PartnerLocationModifyDS = DBAccess.GDBAccessObj.Select(PartnerLocationModifyDS, "SELECT * " + "FROM PUB_" + PPartnerLocationTable.GetTableDBName() + ' ' + "WHERE " + PPartnerLocationTable.GetPartnerKeyDBName() + " IN (" + OtherPartnerKeys + ") " + "AND " + PPartnerLocationTable.GetSiteKeyDBName() + " = ? " + "AND " + PPartnerLocationTable.GetLocationKeyDBName() + " = ?", PPartnerLocationTable.GetTableName(), ASubmitChangesTransaction, ParametersArray); // Change the LocationKey for every one of those PartnerLocation // DataRows to point to the NEW Location for (Counter = 0; Counter <= CreateLocationOtherPartnerKeys.Length - 1; Counter += 1) { ((PPartnerLocationTable)PartnerLocationModifyDS.Tables[0])[Counter].LocationKey = NewLocationLocationKey; } // Submit the changes to those PartnerLocations to the DB PPartnerLocationAccess.SubmitChanges((PPartnerLocationTable)PartnerLocationModifyDS.Tables[0], ASubmitChangesTransaction); } else { // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Created Location " + NewLocationLocationKey.ToString() + ": should not be assigned to any other Partners..."); /* * Don't need to do anything here - the just created Location got already * assigned to the Partner we are currently working with. */ } } else if (UpdateLocation) { // TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Location " + ALocationRow.LocationKey.ToString() + // ": should simply get updated; therefore the Locations of ALL Partners will be changed..."); /* * Don't need to do anything here - the changed Location will be saved * in the call to SubmitChanges in the main loop of the SubmitData function. */ } } ReturnValue = TSubmitChangesResult.scrOK; } else { TLogging.LogAtLevel(9, "PerformLocationChangeChecks: Location " + ALocationRow.LocationKey.ToString() + ": User cancelled the selection - stopping the whole saving process!"); /* * User cancelled the selection - stop the whole saving process! */ AVerificationResult.Add(new TVerificationResult("Location Change Promotion: Information", "No changes were saved because the Location Change Promotion dialog was cancelled by the user.", "Saving cancelled by user", "", TResultSeverity.Resv_Noncritical)); ReturnValue = TSubmitChangesResult.scrError; } return ReturnValue; }
/// <summary> /// todoComment /// </summary> /// <param name="AInspectDS"></param> /// <param name="AExistingLocationParametersDT"></param> /// <param name="AChangeLocationParametersDT"></param> /// <param name="AAddressAddedOrChangedPromotionParametersDT"></param> private static void CheckParameterTables(PartnerAddressAggregateTDS AInspectDS, out PartnerAddressAggregateTDSSimilarLocationParametersTable AExistingLocationParametersDT, out PartnerAddressAggregateTDSChangePromotionParametersTable AChangeLocationParametersDT, out PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedOrChangedPromotionParametersDT) { if (AInspectDS != null) { if (AInspectDS.Tables.Contains(MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME)) { if (AInspectDS.Tables[MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME] is PartnerAddressAggregateTDSSimilarLocationParametersTable) { AExistingLocationParametersDT = (PartnerAddressAggregateTDSSimilarLocationParametersTable)AInspectDS.Tables[MPartnerConstants. EXISTINGLOCATIONPARAMETERS_TABLENAME]; /* if DEBUGMODE * if (TLogging.DL >= 9) * { * TLogging.Log( * "CheckParameterTables: Passed in ParameterTable ''" + MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME + * "''; Rows.Count: " + AExistingLocationParametersDT.Rows.Count.ToString()); * } * if (TLogging.DL >= 8) * { * for (Int16 TmpRowCounter = 0; TmpRowCounter <= AExistingLocationParametersDT.Rows.Count - 1; TmpRowCounter += 1) * { * TLogging.Log( * "CheckParameterTables: AExistingLocationParametersDT: Row[" + TmpRowCounter.ToString() + "]: PLocationKey: " + * AExistingLocationParametersDT[TmpRowCounter][PartnerAddressAggregateTDSSimilarLocationParametersTable. * GetLocationKeyDBName(), * DataRowVersion.Original].ToString() + "; PSiteKey: " + * AExistingLocationParametersDT[TmpRowCounter][PartnerAddressAggregateTDSSimilarLocationParametersTable. * GetSiteKeyDBName(), * DataRowVersion.Original].ToString() + "; RowState: " + * (Enum.GetName(typeof(DataRowState), AExistingLocationParametersDT.Rows[TmpRowCounter].RowState))); * } * } */ } else { throw new EOPAppException("Expected Typed DataTable, received normal DataTable"); } } else { AExistingLocationParametersDT = new PartnerAddressAggregateTDSSimilarLocationParametersTable( MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME); } if (AInspectDS.Tables.Contains(MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME)) { if (AInspectDS.Tables[MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME] is PartnerAddressAggregateTDSChangePromotionParametersTable) { AChangeLocationParametersDT = (PartnerAddressAggregateTDSChangePromotionParametersTable)AInspectDS.Tables[MPartnerConstants. ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME]; // TLogging.LogAtLevel(9, "CheckParameterTables: Passed in ParameterTable ''" + MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME + // "''; Rows.Count: " + AChangeLocationParametersDT.Rows.Count.ToString()); } else { throw new EOPAppException("Expected Typed DataTable, received normal DataTable"); } } else { AChangeLocationParametersDT = new PartnerAddressAggregateTDSChangePromotionParametersTable( MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME); } if (AInspectDS.Tables.Contains(MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME)) { if (AInspectDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME] is PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable) { AAddressAddedOrChangedPromotionParametersDT = (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable)AInspectDS.Tables [MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME]; // TLogging.LogAtLevel(9, "CheckParameterTables: Passed in ParameterTable ''" + MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME + // "''; Rows.Count: " + AAddressAddedOrChangedPromotionParametersDT.Rows.Count.ToString()); } else { throw new EOPAppException("Expected Typed DataTable, received normal DataTable"); } } else { AAddressAddedOrChangedPromotionParametersDT = new PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable( MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME); } } else { // TLogging.LogAtLevel(9, "CheckParameterTables: Passed in ParameterDataSet is nil."); AExistingLocationParametersDT = new PartnerAddressAggregateTDSSimilarLocationParametersTable( MPartnerConstants.EXISTINGLOCATIONPARAMETERS_TABLENAME); AChangeLocationParametersDT = new PartnerAddressAggregateTDSChangePromotionParametersTable( MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME); AAddressAddedOrChangedPromotionParametersDT = new PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable( MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME); } }
/// <summary> /// This procedure initializes this object /// /// </summary> /// <returns>void</returns> public void InitialisePartnerTypeFamilyMembers(PartnerAddressAggregateTDSChangePromotionParametersTable APartnerSharingLocationDT) { // seems that variable is never actually used // was: private PartnerAddressAggregateTDSChangePromotionParametersTable FPartnerSharingLocationDT; // this.FPartnerSharingLocationDT = APartnerSharingLocationDT; }
/// <summary> /// This procedure creates the colums of the Persons' Locations DataGrid /// /// </summary> /// <returns>void</returns> public void CreateColumnsPersonsLocations(TSgrdDataGrid AGrid, System.Data.DataTable ASourceTable) { SourceGrid.Cells.Editors.TextBoxUITypeEditor DateEditor; Ict.Common.TypeConverter.TDateConverter DateTypeConverter; this.DataGridPersonsLocations = AGrid; DateEditor = new SourceGrid.Cells.Editors.TextBoxUITypeEditor(typeof(DateTime)); DateEditor.EditableMode = EditableMode.None; DateTypeConverter = new Ict.Common.TypeConverter.TDateConverter(); DateEditor.TypeConverter = DateTypeConverter; this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerTable.TableId, PPartnerTable.ColumnPartnerShortNameId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerShortNameDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnPartnerKeyId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerKeyDBName()], 77); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnTelephoneNumberId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetTelephoneNumberDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnExtensionId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetExtensionDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnFaxNumberId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetFaxNumberDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnFaxExtensionId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetFaxExtensionDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnMobileNumberId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetMobileNumberDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnAlternateTelephoneId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetAlternateTelephoneDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnEmailAddressId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetEmailAddressDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnUrlId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetUrlDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnLocationTypeId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationTypeDBName()], 88); this.FDataGridPersonsLocations.AddCheckBoxColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnSendMailId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetSendMailDBName()]); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnDateEffectiveId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetDateEffectiveDBName()], -1, null, DateEditor, null, null); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnDateGoodUntilId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetDateGoodUntilDBName()], -1, null, DateEditor, null, null); // this.FDataGridPersonsLocations.AddTextColumn(PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyLabel(), // ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyDBName()], 77); this.FDataGridPersonsLocations.AddTextColumn( TTypedDataTable.GetLabel(PPartnerLocationTable.TableId, PPartnerLocationTable.ColumnLocationKeyId), ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyDBName()]); // Following Columns are for debugging only! // this.FDataGridPersonsLocations.AddTextColumn('Site Key Of Edited Record', ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyOfEditedRecordDBName()], 77); // this.FDataGridPersonsLocations.AddTextColumn('Location Key Of Edited Record', ASourceTable.Columns[PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyOfEditedRecordDBName()]); }
/// <summary> /// </summary> /// <param name="APartnerLocationRow"></param> /// <param name="APartnerKey"></param> /// <param name="AAddressAddedOrChangedPromotionDT"></param> /// <param name="AReadTransaction"></param> /// <param name="AUpdatePartnerLocations"></param> /// <param name="AUpdatePartnerLocationOtherPersons"></param> /// <param name="AChangePromotionParametersDT"></param> /// <returns></returns> private static Boolean CheckPartnerLocationChange(PPartnerLocationRow APartnerLocationRow, Int64 APartnerKey, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressAddedOrChangedPromotionDT, TDBTransaction AReadTransaction, out Boolean AUpdatePartnerLocations, out Int64[, ] AUpdatePartnerLocationOtherPersons, ref PartnerAddressAggregateTDSChangePromotionParametersTable AChangePromotionParametersDT) { Boolean ReturnValue; DataView AddressAddedOrChangedPromotionDV; StringCollection ChangedDetails; string[] ChangeSomeArray; PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow AddressAddedOrChangedRow; OdbcParameter[] ParametersArray; DataSet PersonsLocationReferencesDS; DataRow OtherPartnerLocationReferenceRow; Int32 Counter; Int32 Counter2; Int32 Counter3; PartnerAddressAggregateTDSChangePromotionParametersRow PartnerLocationChangePromotionRow; DataView AChangePromotionParametersDV; AUpdatePartnerLocations = false; AUpdatePartnerLocationOtherPersons = new Int64[0, 0]; // TLogging.LogAtLevel(9, "CheckPartnerLocationChange for Location " + APartnerLocationRow.LocationKey.ToString() + // ": AAddressAddedOrChangedPromotionDT.Rows.Count: " + AAddressAddedOrChangedPromotionDT.Rows.Count.ToString()); // Check if there is a Parameter Row for the LocationKey we are looking at AddressAddedOrChangedPromotionDV = new DataView(AAddressAddedOrChangedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetPartnerLocationChangeDBName() + " = true", "", DataViewRowState.CurrentRows); // APartnerLocationRow.SiteKey.ToString // APartnerLocationRow.LocationKey.ToString // No, there isn't one therefore create one (if necessary) if (AddressAddedOrChangedPromotionDV.Count == 0) { /* * Check if one ore more of specific PartnerLocation Data-holding fields * were changed */ if (CheckHasPartnerLocationPromotionDetailChanged(APartnerLocationRow, out ChangedDetails)) { if (PPersonAccess.CountViaPFamily(APartnerKey, AReadTransaction) > 0) { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: PartnerLocation with LocationKey " + APartnerLocationRow.LocationKey.ToString() + // ": certain fields have been changed and there are Family Members to which they can be promoted!"); #region Build AddressAddedOrChangedPromotion DataTable AAddressAddedOrChangedPromotionDT = new PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable( MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME); AddressAddedOrChangedRow = AAddressAddedOrChangedPromotionDT.NewRowTyped(false); AddressAddedOrChangedRow.SiteKey = Convert.ToInt64(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original]); // APartnerLocationRow.SiteKey; AddressAddedOrChangedRow.LocationKey = Convert.ToInt32(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName(), DataRowVersion.Original]); // APartnerLocationRow.LocationKey; AddressAddedOrChangedRow.PartnerKey = APartnerKey; AddressAddedOrChangedRow.LocationChange = false; AddressAddedOrChangedRow.PartnerLocationChange = true; AddressAddedOrChangedRow.LocationAdded = false; AddressAddedOrChangedRow.ChangedFields = StringHelper.StrMerge(ChangedDetails, '|'); // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: ChangedFields String: " + AddressAddedOrChangedRow.ChangedFields.ToString() + // " (ChangedDetails.Count /4: " + Convert.ToInt16(ChangedDetails.Count / 4.0).ToString() + ')'); AddressAddedOrChangedRow.AnswerProcessedClientSide = false; AddressAddedOrChangedRow.AnswerProcessedServerSide = false; AAddressAddedOrChangedPromotionDT.Rows.Add(AddressAddedOrChangedRow); #endregion #region Build ChangePromotionParameters DataTable AChangePromotionParametersDT = new PartnerAddressAggregateTDSChangePromotionParametersTable( MPartnerConstants.ADDRESSCHANGEPROMOTIONPARAMETERS_TABLENAME); // Load data for all PERSONs of the FAMILY ParametersArray = new OdbcParameter[1]; ParametersArray[0] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[0].Value = (System.Object)(APartnerKey); PersonsLocationReferencesDS = DBAccess.GDBAccessObj.Select( "SELECT PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetPartnerKeyDBName() + ", " + PPartnerLocationTable.GetSiteKeyDBName() + ", " + PPartnerLocationTable.GetLocationKeyDBName() + ", " + PPartnerTable.GetPartnerShortNameDBName() + ", " + PPartnerTable.GetPartnerClassDBName() + ", " + PPartnerLocationTable.GetTelephoneNumberDBName() + ", " + PPartnerLocationTable.GetExtensionDBName() + ", " + PPartnerLocationTable.GetFaxNumberDBName() + ", " + PPartnerLocationTable.GetFaxExtensionDBName() + ", " + PPartnerLocationTable.GetAlternateTelephoneDBName() + ", " + PPartnerLocationTable.GetMobileNumberDBName() + ", " + PPartnerLocationTable.GetEmailAddressDBName() + ", " + PPartnerLocationTable.GetUrlDBName() + ", " + PPartnerLocationTable.GetSendMailDBName() + ", " + PPartnerLocationTable.GetDateEffectiveDBName() + ", " + PPartnerLocationTable.GetDateGoodUntilDBName() + ", " + PPartnerLocationTable.GetLocationTypeDBName() + ' ' + "FROM PUB_" + PPersonTable.GetTableDBName() + ", PUB_" + PPartnerLocationTable.GetTableDBName() + ", PUB_" + PPartnerTable.GetTableDBName() + ' ' + "WHERE PUB_" + PPersonTable.GetTableDBName() + '.' + PPersonTable.GetFamilyKeyDBName() + " = ? " + "AND PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetPartnerKeyDBName() + " = PUB_" + PPersonTable.GetTableDBName() + '.' + PPersonTable.GetPartnerKeyDBName() + ' ' + "AND PUB_" + PPartnerTable.GetTableDBName() + '.' + PPartnerTable.GetPartnerKeyDBName() + " = PUB_" + PPersonTable.GetTableDBName() + '.' + PPersonTable.GetPartnerKeyDBName( ) + ' ' + "ORDER BY PUB_" + PPersonTable.GetTableDBName() + '.' + PPersonTable.GetFamilyIdDBName() + " ASC, PUB_" + PPartnerLocationTable.GetTableDBName() + '.' + PPartnerLocationTable.GetSendMailDBName() + " DESC", "PersonsLocationReferences", AReadTransaction, ParametersArray); // Insert data into the ChangePromotionParameters DataTable for (Counter = 0; Counter <= PersonsLocationReferencesDS.Tables[0].Rows.Count - 1; Counter += 1) { OtherPartnerLocationReferenceRow = PersonsLocationReferencesDS.Tables[0].Rows[Counter]; PartnerLocationChangePromotionRow = AChangePromotionParametersDT.NewRowTyped(false); PartnerLocationChangePromotionRow.PartnerKey = Convert.ToInt64(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetPartnerKeyDBName()]); PartnerLocationChangePromotionRow.SiteKey = Convert.ToInt64(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetSiteKeyDBName()]); PartnerLocationChangePromotionRow.LocationKey = Convert.ToInt32(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetLocationKeyDBName()]); PartnerLocationChangePromotionRow.PartnerShortName = OtherPartnerLocationReferenceRow[PPartnerTable.GetPartnerShortNameDBName()].ToString(); PartnerLocationChangePromotionRow.PartnerClass = OtherPartnerLocationReferenceRow[PPartnerTable.GetPartnerClassDBName()].ToString(); PartnerLocationChangePromotionRow.TelephoneNumber = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetTelephoneNumberDBName()].ToString(); PartnerLocationChangePromotionRow.Extension = Convert.ToInt32(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetExtensionDBName()]); PartnerLocationChangePromotionRow.FaxNumber = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetFaxNumberDBName()].ToString(); PartnerLocationChangePromotionRow.FaxExtension = Convert.ToInt32(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetFaxExtensionDBName()]); PartnerLocationChangePromotionRow.AlternateTelephone = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetAlternateTelephoneDBName()].ToString(); PartnerLocationChangePromotionRow.MobileNumber = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetMobileNumberDBName()].ToString(); PartnerLocationChangePromotionRow.EmailAddress = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetEmailAddressDBName()].ToString(); PartnerLocationChangePromotionRow.Url = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetUrlDBName()].ToString(); PartnerLocationChangePromotionRow.SendMail = Convert.ToBoolean(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetSendMailDBName()]); if (!OtherPartnerLocationReferenceRow.IsNull(PPartnerLocationTable.GetDateEffectiveDBName())) { PartnerLocationChangePromotionRow.DateEffective = Convert.ToDateTime(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetDateEffectiveDBName()]); } if (!OtherPartnerLocationReferenceRow.IsNull(PPartnerLocationTable.GetDateGoodUntilDBName())) { PartnerLocationChangePromotionRow.DateGoodUntil = Convert.ToDateTime(OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetDateGoodUntilDBName()]); } PartnerLocationChangePromotionRow.LocationType = OtherPartnerLocationReferenceRow[PPartnerLocationTable.GetLocationTypeDBName()].ToString(); // Add the SiteKey and LocationKey of the currently processed // PartnerLocation record. This is necessary to be able to filter on the // rows at a later stage on Client side and Server side! PartnerLocationChangePromotionRow.SiteKeyOfEditedRecord = Convert.ToInt64(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original]); // APartnerLocationRow.SiteKey; PartnerLocationChangePromotionRow.LocationKeyOfEditedRecord = Convert.ToInt32(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable. GetLocationKeyDBName(), DataRowVersion.Original]); // APartnerLocationRow.LocationKey; AChangePromotionParametersDT.Rows.Add(PartnerLocationChangePromotionRow); } // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: Location " + APartnerLocationRow.LocationKey.ToString() + // ": inserted PartnerLocation data of " + AChangePromotionParametersDT.Rows.Count.ToString() + // " PERSON''s of that FAMILY into AChangePromotionParametersDT!"); #endregion } } ReturnValue = true; } else { // AAddressAddedOrChangedPromotionDT was passed in, holding parameters for the LocationKey we are looking at AddressAddedOrChangedRow = (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow)AddressAddedOrChangedPromotionDV[0].Row; if (AddressAddedOrChangedRow.UserAnswer == "CHANGE-NONE") { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AAddressAddedOrChangedPromotionDT tells me to UPDATE NONE of the Persons with the changes that were made to the PartnerLocation."); // No processing necessary! AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else if (AddressAddedOrChangedRow.UserAnswer.StartsWith("CHANGE-SOME")) { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AAddressAddedOrChangedPromotionDT tells me to UPDATE SOME Persons with the changes that were made to the PartnerLocation."); AUpdatePartnerLocations = true; // Parse the UserAnswer. It's format is 'CHANGESOME:PartnerKey1,SiteKey1,LocationKey1;PartnerKey2,SiteKey2,LocationKey2;PartnerKeyN,SiteKeyN,LocationKeyN' ChangeSomeArray = AddressAddedOrChangedRow.UserAnswer.Split(":,;".ToCharArray()); /* * Build the AUpdatePartnerLocationOtherPersons array from the UserAnswer * to signal to calling procedure that the changes that were made to the * PartnerLocation that we are processing should be * taken over to all the Person's PartnerLocations contained in the Array. */ AUpdatePartnerLocationOtherPersons = new Int64[Convert.ToInt32((ChangeSomeArray.Length - 1) / 3.0), 3]; // Counter: ' 1': don't include 'CHANGESOME' array entry, '/ 3' each entry consists of three strings: Counter = 1; Counter2 = 0; while (Counter < AUpdatePartnerLocationOtherPersons.GetLength(0) * 3) { // store PartnerKey AUpdatePartnerLocationOtherPersons[Counter2, 0] = Convert.ToInt64(ChangeSomeArray[Counter]); // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: PartnerKey[" + Counter2.ToString() + "]: " + // AUpdatePartnerLocationOtherPersons[Counter2, 0].ToString()); // store SiteKey AUpdatePartnerLocationOtherPersons[Counter2, 1] = Convert.ToInt32(ChangeSomeArray[Counter + 1]); // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: SiteKey[" + Counter2.ToString() + "]: " + // AUpdatePartnerLocationOtherPersons[Counter2, 1].ToString()); // store LocationKey AUpdatePartnerLocationOtherPersons[Counter2, 2] = Convert.ToInt32(ChangeSomeArray[Counter + 2]); // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: LocationKey[" + Counter2.ToString() + "]: " + // AUpdatePartnerLocationOtherPersons[Counter2, 2].ToString()); // position Counter to next 'record' of PartnerKey, SiteKey and LocationKey Counter = Counter + 3; Counter2 = Counter2 + 1; } AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else if (AddressAddedOrChangedRow.UserAnswer == "CHANGE-ALL") { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AAddressAddedOrChangedPromotionDT tells me to UPDATE ALL Persons with the changes that were made to the PartnerLocation."); AUpdatePartnerLocations = true; /* * Build the AUpdatePartnerLocationOtherPersons array from * AChangePromotionParametersDT to signal to calling procedure that the * changes that were made to the PartnerLocation that we are processing * should be taken over to all the Person's PartnerLocations contained in * the Array. */ // Process only AChangePromotionParametersDT rows that are for the current // SiteKey and LocationKey! // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AChangePromotionParametersDT.Rows.Count: " + // AChangePromotionParametersDT.Rows.Count.ToString()); AChangePromotionParametersDV = new DataView(AChangePromotionParametersDT, PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyOfEditedRecordDBName() + " = " + Convert.ToInt64(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original]).ToString() + " AND " + PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyOfEditedRecordDBName() + " = " + Convert.ToInt32(APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName(), DataRowVersion.Original]).ToString(), "", DataViewRowState.CurrentRows); // APartnerLocationRow.SiteKey.ToString // APartnerLocationRow.LocationKey.ToString // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AChangePromotionParametersDV.Count: " + AChangePromotionParametersDV.Count.ToString()); AUpdatePartnerLocationOtherPersons = new Int64[AChangePromotionParametersDV.Count, 3]; for (Counter3 = 0; Counter3 <= AChangePromotionParametersDV.Count - 1; Counter3 += 1) { // store PartnerKey AUpdatePartnerLocationOtherPersons[Counter3, 0] = ((PartnerAddressAggregateTDSChangePromotionParametersRow)(AChangePromotionParametersDV[Counter3].Row)).PartnerKey; // store SiteKey AUpdatePartnerLocationOtherPersons[Counter3, 1] = ((PartnerAddressAggregateTDSChangePromotionParametersRow)(AChangePromotionParametersDV[Counter3].Row)).SiteKey; // store LocationKey AUpdatePartnerLocationOtherPersons[Counter3, 2] = ((PartnerAddressAggregateTDSChangePromotionParametersRow)(AChangePromotionParametersDV[Counter3].Row)).LocationKey; } AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = true; } else if (AddressAddedOrChangedRow.UserAnswer == "CANCEL") { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AAddressAddedOrChangedPromotionDT tells me to CANCEL the changing of the PartnerLocation."); AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = false; } else { // TLogging.LogAtLevel(9, "CheckPartnerLocationChange: AAddressAddedOrChangedPromotionDT holds unexpected UserAnswer: " + // AddressAddedOrChangedRow.UserAnswer + "! Aborting operation!!!"); AddressAddedOrChangedRow.AnswerProcessedClientSide = true; AddressAddedOrChangedRow.AcceptChanges(); ReturnValue = false; } } return ReturnValue; }
/// <summary> /// todoComment /// /// @comment Must only be called for Partners of Partner Class FAMILY - the /// function does no checks on that and will fail for other Partner Classes! /// </summary> /// <param name="APartnerLocationRow"></param> /// <param name="APartnerKey"></param> /// <param name="AResponseDS"></param> /// <param name="ASubmitChangesTransaction"></param> /// <param name="AAddressChangedPromotionDT"></param> /// <param name="AChangeLocationParametersDT"></param> /// <param name="APartnerLocationTable"></param> /// <param name="AVerificationResult"></param> /// <returns></returns> private static TSubmitChangesResult PerformPartnerLocationChangeChecks(PPartnerLocationRow APartnerLocationRow, Int64 APartnerKey, ref PartnerAddressAggregateTDS AResponseDS, TDBTransaction ASubmitChangesTransaction, ref PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddressChangedPromotionDT, ref PartnerAddressAggregateTDSChangePromotionParametersTable AChangeLocationParametersDT, ref PPartnerLocationTable APartnerLocationTable, ref TVerificationResultCollection AVerificationResult) { TSubmitChangesResult ReturnValue; DataView PropagateLocationParametersDV; DataView PropagateLocationParametersProcessedDV; Boolean UpdatePartnerLocations; Int64[, ] UpdatePartnerLocationOtherPersons; OdbcParameter[] ParametersArray; DataSet PartnerLocationModifyDS; StringCollection ChangedFieldsColl; String[] ChangedFieldsArr; Int32 Counter; Int32 Counter2; Int32 Counter3; Int32 Counter4; PPartnerLocationTable PartnerLocationModificationDT; // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: AAddressChangedPromotionDT.Rows.Count: " + AAddressChangedPromotionDT.Rows.Count.ToString()); UpdatePartnerLocations = false; if (CheckPartnerLocationChange(APartnerLocationRow, APartnerKey, ref AAddressChangedPromotionDT, ASubmitChangesTransaction, out UpdatePartnerLocations, out UpdatePartnerLocationOtherPersons, ref AChangeLocationParametersDT)) { // Check if there is a Parameter Row for the LocationKey we are looking at PropagateLocationParametersDV = new DataView(AAddressChangedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetPartnerLocationChangeDBName() + " = true AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetAnswerProcessedClientSideDBName() + " = false", "", DataViewRowState.CurrentRows); // APartnerLocationRow.SiteKey.ToString // APartnerLocationRow.LocationKey.ToString if (PropagateLocationParametersDV.Count > 0) { // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: PartnerLocation " + APartnerLocationRow.LocationKey.ToString() + // ": PartnerLocation has been changed, decision on propagation is needed."); /* * More information is needed (usually via user interaction) * -> stop processing here and return parameters * (usually used for UI interaction) */ if (AResponseDS == null) { // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Creating AResponseDS."); AResponseDS = new PartnerAddressAggregateTDS(MPartnerConstants.PARTNERADDRESSAGGREGATERESPONSE_DATASET); } // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: AAddressAddedPromotionDT.Rows.Count: " + AAddressChangedPromotionDT.Rows.Count.ToString()); AResponseDS.Merge(AAddressChangedPromotionDT); // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Merged AAddressAddedPromotionDT into AResponseDS."); AResponseDS.Merge(AChangeLocationParametersDT); // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Merged ChangePromotionParametersDT into AResponseDS."); // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: AResponseDS.Tables[" + MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME + // "].Rows.Count: " + AResponseDS.Tables[MPartnerConstants.ADDRESSADDEDORCHANGEDPROMOTION_TABLENAME].Rows.Count.ToString()); ReturnValue = TSubmitChangesResult.scrInfoNeeded; return ReturnValue; } else { /* * NOTE: If there are no Family Members, CheckPartnerLocationChange will * return true, but the PropagateLocationParametersDV.Count will be 0, so * the processing will also go here and find UpdatePartnerLocations false * (default assigned at beginning), so nothing will happen. */ if (UpdatePartnerLocations) { // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: User made his/her choice regarding PartnerLocation Change promotion; now processing..."); /* * User made his/her choice regarding PartnerLocation Change promotion; * now process it */ // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Updated FAMILY PartnerLocation " + APartnerLocationRow.LocationKey.ToString() + // ": changes should be assigned to " + Convert.ToInt32(UpdatePartnerLocationOtherPersons.GetLength(0)).ToString() + " PartnerLocations of PERSONs..."); PartnerLocationModifyDS = null; // Find associated Parameter Row PropagateLocationParametersProcessedDV = new DataView( AAddressChangedPromotionDT, PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetSiteKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName() + " = " + APartnerLocationRow[PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetLocationKeyDBName(), DataRowVersion.Original].ToString() + " AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetPartnerLocationChangeDBName() + " = true AND " + PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable.GetAnswerProcessedClientSideDBName() + " = true", "", DataViewRowState.CurrentRows); // APartnerLocationRow.SiteKey.ToString // APartnerLocationRow.LocationKey.ToString /* * Create a Collection by splitting String 'ChangedFields' from the * Parameter Row. * The String contains: DBName, Label, OriginalValue, CurrentValue for * each changed DataColumn. */ ChangedFieldsColl = StringHelper.StrSplit(((PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow) PropagateLocationParametersProcessedDV[0]. Row).ChangedFields, "|"); ChangedFieldsArr = new String[(Convert.ToInt16(ChangedFieldsColl.Count / 4.0))]; // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Length(ChangedFieldsArr): " + Convert.ToInt16(ChangedFieldsArr.Length).ToString()); Counter = 0; Counter2 = 0; // Build array that contains just the DB names of the changed fields while (Counter2 <= ChangedFieldsArr.Length - 1) { ChangedFieldsArr[Counter2] = ChangedFieldsColl[Counter]; // position Counter to next DB Field name Counter = Counter + 4; Counter2 = Counter2 + 1; } /* * Load data for each Person's PartnerLocation to which the changes to * the Family's PartnerLocation should be taken over and apply the change. */ PartnerLocationModifyDS = new DataSet(); PartnerLocationModifyDS.Tables.Add(new PPartnerLocationTable(PPartnerLocationTable.GetTableName())); for (Counter3 = 0; Counter3 <= UpdatePartnerLocationOtherPersons.GetLength(0) - 1; Counter3 += 1) { ParametersArray = new OdbcParameter[3]; ParametersArray[0] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[0].Value = (System.Object)(UpdatePartnerLocationOtherPersons[Counter3, 0]); ParametersArray[1] = new OdbcParameter("", OdbcType.Decimal, 10); ParametersArray[1].Value = (System.Object)(UpdatePartnerLocationOtherPersons[Counter3, 1]); ParametersArray[2] = new OdbcParameter("", OdbcType.Int); ParametersArray[2].Value = (System.Object)(UpdatePartnerLocationOtherPersons[Counter3, 2]); PartnerLocationModifyDS = DBAccess.GDBAccessObj.Select(PartnerLocationModifyDS, "SELECT * " + "FROM PUB_" + PPartnerLocationTable.GetTableDBName() + ' ' + "WHERE " + PPartnerLocationTable.GetPartnerKeyDBName() + " = ? " + "AND " + PPartnerLocationTable.GetSiteKeyDBName() + " = ? " + "AND " + PPartnerLocationTable.GetLocationKeyDBName() + " = ?", PPartnerLocationTable.GetTableName(), ASubmitChangesTransaction, ParametersArray); PartnerLocationModificationDT = ((PPartnerLocationTable)PartnerLocationModifyDS.Tables[0]); // Take over defined Columns' contents (only those Columns containing // changes) of the FAMILY's PartnerLocation to the loaded // PartnerLocation for (Counter4 = 0; Counter4 <= ChangedFieldsArr.Length - 1; Counter4 += 1) { PartnerLocationModificationDT[0][ChangedFieldsArr[Counter4]] = APartnerLocationRow[ChangedFieldsArr[Counter4]]; // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Changes to Column " + ChangedFieldsArr[Counter4].ToString() + // " taken over for LocationKey " + PartnerLocationModificationDT[0][PPartnerLocationTable.GetLocationKeyDBName()].ToString()); } // Submit the changes of the processed Person's PartnerLocation record to the DB PPartnerLocationAccess.SubmitChanges(PartnerLocationModificationDT, ASubmitChangesTransaction); // Don't keep the Person's PPartnerLocation in memory that we just processed! PartnerLocationModifyDS.Tables[0].Rows.Clear(); } } } ReturnValue = TSubmitChangesResult.scrOK; } else { // TLogging.LogAtLevel(9, "PerformPartnerLocationChangeChecks: Location " + APartnerLocationRow.LocationKey.ToString() + ": User cancelled the selection - stopping the whole saving process!"); /* * User cancelled the selection - stop the whole saving process! */ AVerificationResult.Add(new TVerificationResult("Partner-specific Address Data Change Promotion: Information", "No changes were saved because the Partner-specific Address Data Promotion dialog was cancelled by the user.", "Saving cancelled by user", "", TResultSeverity.Resv_Noncritical)); ReturnValue = TSubmitChangesResult.scrError; } return ReturnValue; }
/// <summary> /// This procedure initializes this System.Object. /// /// </summary> /// <returns>void</returns> public void InitialisePartnerTypeFamilyMembers(PartnerAddressAggregateTDSChangePromotionParametersTable APartnerSharingLocationDT) { // seems this variable is never actually being used // was: private PartnerAddressAggregateTDSChangePromotionParametersTable FPartnerSharingLocationDT; // this.FPartnerSharingLocationDT = APartnerSharingLocationDT; }
/// <summary> /// Called if the PetraServer responds on added Address(es) that was/were /// submitted in a call to the UIConnector's SubmitChanges function. /// /// The PetraServer found out that the Address(es) is/are added to a Partner of /// Partner Class FAMILY and that this FAMILY has got Family Members. The user /// needs to decide whether the Address(es) should be added to all members of /// the family. /// The user's answer is stored in the AAddedOrChangedPromotionDT DataTable for /// each Address. Eventually this DataTable is sent back to the PetraServer for /// further evaluation and action. /// /// </summary> /// <param name="AAddedOrChangedPromotionDT">DataTable containing parameter data that /// needs to be processed</param> /// <param name="AParameterDT">DataTable containing detail data for each record in /// AAddedOrChangedPromotionDT /// </param> /// <returns>void</returns> public void ProcessServerResponseAddressAddedOrChanged( PartnerAddressAggregateTDSAddressAddedOrChangedPromotionTable AAddedOrChangedPromotionDT, PartnerAddressAggregateTDSChangePromotionParametersTable AParameterDT) { PLocationRow LocationRow; PLocationTable LocationDT; System.Windows.Forms.DialogResult AddressAddedPromotionDialogResult; int Counter; PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow AddressAddedOrChangedPromotionRow; string FilterCriteria; DataView PartnerSharingLocationDV; TFrmPartnerAddressChangePropagationDialog AddressChangedDialog; string UserAnswer; for (Counter = 0; Counter <= AAddedOrChangedPromotionDT.Rows.Count - 1; Counter += 1) { AddressAddedOrChangedPromotionRow = (PartnerAddressAggregateTDSAddressAddedOrChangedPromotionRow)AAddedOrChangedPromotionDT.Rows[Counter]; if (!AddressAddedOrChangedPromotionRow.AnswerProcessedClientSide) { if (AddressAddedOrChangedPromotionRow.LocationAdded) { LocationRow = (PLocationRow)FMainDS.PLocation.Rows.Find(new Object[] { AddressAddedOrChangedPromotionRow.SiteKey, AddressAddedOrChangedPromotionRow.LocationKey }); if (LocationRow != null) { LocationDT = (PLocationTable)LocationRow.Table; AddressAddedPromotionDialogResult = MessageBox.Show( Catalog.GetString("You have added the following address to this family:") + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnLocality, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnStreetName, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnAddress3, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnCity, LocationRow) + ' ' + TSaveConvert.StringColumnToString(LocationDT.ColumnPostalCode, LocationRow) + "\r\n" + " " + TSaveConvert.StringColumnToString(LocationDT.ColumnCounty, LocationRow) + ' ' + TSaveConvert.StringColumnToString(LocationDT.ColumnCountryCode, LocationRow) + "\r\n" + "\r\n" + Catalog.GetString("Do you want to add this address to all members\r\nof this family?"), Catalog.GetString("Add Address to Family Members?"), MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (AddressAddedPromotionDialogResult == System.Windows.Forms.DialogResult.Yes) { AddressAddedOrChangedPromotionRow.UserAnswer = "YES"; } else { AddressAddedOrChangedPromotionRow.UserAnswer = "NO"; } } else { MessageBox.Show( "Error in " + this.GetType().FullName + ".AddressAddedOrChangedProcessing (LocationAdded): " + "Location with SiteKey " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " and LocationKey " + AddressAddedOrChangedPromotionRow.LocationKey.ToString() + " could not be found on the Client side!"); AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; } } else if (AddressAddedOrChangedPromotionRow.LocationChange) { if (AParameterDT != null) { FilterCriteria = PartnerAddressAggregateTDSChangePromotionParametersTable.GetSiteKeyDBName() + " = " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " AND " + PartnerAddressAggregateTDSChangePromotionParametersTable.GetLocationKeyDBName() + " = " + AddressAddedOrChangedPromotionRow.LocationKey.ToString(); // MessageBox.Show('FilterCriteria: ' + FilterCriteria); LocationRow = (PLocationRow)FMainDS.PLocation.Rows.Find(new Object[] { AddressAddedOrChangedPromotionRow.SiteKey, AddressAddedOrChangedPromotionRow.LocationKey }); if (LocationRow != null) { PartnerSharingLocationDV = new DataView(AParameterDT, FilterCriteria, PartnerAddressAggregateTDSChangePromotionParametersTable.GetPartnerKeyDBName() + " ASC", DataViewRowState.CurrentRows); AddressChangedDialog = new TFrmPartnerAddressChangePropagationDialog(FindForm()); AddressChangedDialog.SetParameters(AddressAddedOrChangedPromotionRow, PartnerSharingLocationDV, LocationRow, "", ""); if (AddressChangedDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; // get AddressChangedDialog out of memory AddressChangedDialog.Dispose(); // MessageBox.Show('AddressChangedDialog: pressed Cancel.'); } else { if (AddressChangedDialog.GetReturnedParameters(out UserAnswer)) { AddressAddedOrChangedPromotionRow.UserAnswer = UserAnswer; if (AddressAddedOrChangedPromotionRow.UserAnswer.StartsWith("CHANGE")) { /* * The LocationRow gets deleted from the LocationTable on the * Server side, but there a AcceptChanges is done so that the * DataRow doesn't actually get deleted from the DB. The Client * would then no longer know that it needs to delete it, so we * need do remember to do it later! */ AddCleanupAddressesLocationKey((Int32)AddressAddedOrChangedPromotionRow.LocationKey); } } else { throw new System.Exception( "GetReturnedParameters called, but Form '" + AddressChangedDialog.Name + "' is not finished yet with initialisation"); } // get NewPartnerDialog out of memory AddressChangedDialog.Dispose(); } } else { MessageBox.Show( "Error in " + this.GetType().FullName + ".AddressAddedOrChangedProcessing (LocationChange): " + "Location with SiteKey " + AddressAddedOrChangedPromotionRow.SiteKey.ToString() + " and LocationKey " + AddressAddedOrChangedPromotionRow.LocationKey.ToString() + " could not be found on the Client side!"); AddressAddedOrChangedPromotionRow.UserAnswer = "CANCEL"; } } else { throw new System.ArgumentException("AParameterDT must not be nil when LocationChange = true"); } } } } }