/// <summary> /// TODO: Replace this with the Data Validation Framework - once it supports user interaction as needed /// in this case (=asking the user to make a decision). /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnUnitDataColumnChanging(System.Object sender, DataColumnChangeEventArgs e) { TVerificationResult VerificationResultReturned; TScreenVerificationResult VerificationResultEntry; Control BoundControl; // MessageBox.Show('Column ''' + e.Column.ToString + ''' is changing...'); try { if (TPartnerVerification.VerifyUnitData(e, FMainDS, out VerificationResultReturned) == false) { if (VerificationResultReturned.ResultCode != PetraErrorCodes.ERR_UNITNAMECHANGEUNDONE) { TMessages.MsgVerificationError(VerificationResultReturned, this.GetType()); BoundControl = TDataBinding.GetBoundControlForColumn(BindingContext[FMainDS.PUnit], e.Column); // MessageBox.Show('Bound control: ' + BoundControl.ToString); // TODO BoundControl.Focus(); VerificationResultEntry = new TScreenVerificationResult(this, e.Column, VerificationResultReturned.ResultText, VerificationResultReturned.ResultTextCaption, VerificationResultReturned.ResultCode, BoundControl, VerificationResultReturned.ResultSeverity); FPetraUtilsObject.VerificationResultCollection.Add(VerificationResultEntry); // MessageBox.Show('After setting the error: ' + e.ProposedValue.ToString); } else { // undo the change in the DataColumn e.ProposedValue = e.Row[e.Column.ColumnName, DataRowVersion.Original]; // need to assign this to make the change actually visible... txtUnitName.Text = e.ProposedValue.ToString(); // TODO BoundControl = TDataBinding.GetBoundControlForColumn(BindingContext[FMainDS.PUnit], e.Column); // MessageBox.Show('Bound control: ' + BoundControl.ToString); // TODO BoundControl.Focus(); } } else { if (FPetraUtilsObject.VerificationResultCollection.Contains(e.Column)) { FPetraUtilsObject.VerificationResultCollection.Remove(e.Column); } } } catch (Exception Exp) { MessageBox.Show(Exp.ToString()); } }
public ContentBuilder(TextWriter textWriter, TLanguages languages, TSetupTypes setupTypes, TCustomMessages customMessages, TMessages messages, TComponents components, TTasks tasks, HashSet <InstallationMethod> methods) { _textWriter = textWriter; _languages = languages; _setupTypes = setupTypes; _customMessages = customMessages; _messages = messages; _components = components; _methods = methods; _tasks = tasks; }
private static List <Message> Parse(TMessages messages) { var result = new List <Message>(); foreach (var message in messages.Messages) { result.Add(MessageParser.Parse(message)); } return(result); }
private IList <TEntry> AddEntries <TEntry, TBuilder>( string sectionName, Func <TBuilder> builderFactory, Func <Func <TBuilder>, TLanguages, TSetupTypes, TCustomMessages, TMessages, TComponents, TTasks, IEnumerable <TEntry> > builder, TLanguages languages, TSetupTypes setupTypes, TCustomMessages customMessages, TMessages messages, TComponents components, TTasks tasks, Action <TEntry> newEntryHandler = null) where TEntry : ICustomizable, IPredicated { var entries = builder(builderFactory, languages, setupTypes, customMessages, messages, components, tasks).ToList(); if (entries.Count > 0) { var typeConverterFactory = new Func <System.ComponentModel.TypeConverterAttribute, System.ComponentModel.TypeConverter>(attr => { var type = typeof(DelegateExpressionToStringConverter <Func <string, bool> >); var converterType = Type.GetType(attr.ConverterTypeName); if (converterType == type) { return(new DelegateExpressionToStringConverter <Func <string, bool> >(methodInfo => { if (!_methods.Any(im => im.MetadataToken == methodInfo.MetadataToken)) { _methods.Add(new InstallationMethod(methodInfo)); } })); } return((System.ComponentModel.TypeConverter)Activator.CreateInstance(converterType)); }); using (new Section(_textWriter, sectionName)) { foreach (var entry in entries) { newEntryHandler?.Invoke(entry); var converter = new PropertiesToNameValuePairsConverter(_propertyFormatter, typeConverterFactory); var pairs = converter.ConvertTo(entry, typeof(NameValueCollection)) as NameValueCollection; _textWriter.WriteLine(pairs.Format()); } } } return(entries); }
private void BtnOK_Click(System.Object sender, EventArgs e) { if (clbAddress.CheckedItemsCount == 0) { FUserAnswer = "CHANGE-NONE"; } else if (clbAddress.CheckedItemsCount == FPartnerSharingLocationDV.Count) { FUserAnswer = "CHANGE-ALL"; } else { FUserAnswer = "CHANGE-SOME" + ':'; FUserAnswer = FUserAnswer + clbAddress.GetCheckedStringList(); // return list separated by ';' FUserAnswer.Replace(',', ';'); } //MessageBox.Show("FUserAnswer: " + FUserAnswer); if ((FUserAnswer == "CHANGE-NONE") || (FUserAnswer.StartsWith("CHANGE-SOME"))) { /* Check whether user has CREATE right on p_location table */ if (!UserInfo.GUserInfo.IsTableAccessOK(TTableAccessPermission.tapCREATE, PLocationTable.GetTableDBName())) { TMessages.MsgSecurityException(new ESecurityDBTableAccessDeniedException("", "create", PLocationTable.GetTableDBName()), this.GetType()); MessageBox.Show(Catalog.GetString("Due to the selection that you have made" + " a new Address would need" + "\r\n" + "to be created. However, you do not have permission to do this." + "\r\n" + "\r\n" + "Either select 'Change all' to change all addresses (if this is appropriate)," + "\r\n" + "or choose 'Cancel' to abort the Save operation."), Catalog.GetString("Security Violation - Explanation"), MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { DialogResult = System.Windows.Forms.DialogResult.OK; } } else { DialogResult = System.Windows.Forms.DialogResult.OK; } Close(); }
private static FileTreeNode CreateTreeNodeByMessage(TMessages msg) { FileTreeNode node = new FileTreeNode(); TFile file = msg.FileOject; node.CreateDate = (uint)msg.ProvideTime; node.FileID = file.FileId; node.FileInfo = file.FileInfo; node.FileKind = (ContentKind)file.FileKind; node.FileSize = (ulong)file.FileSize; node.FromApp = msg.FromApp; node.NodeName = msg.ProvideName; node.SubNodes = null; return(node); }
public void AddMessage(TMessages mes) { //заносим сообщение в базу string query = @" insert into dbo.TMessages (contactID,messageText,topicID) values ( '" + mes.contact + @"', '" + mes.messageText + @"', '" + mes.topic + @"' ) "; DoSqlRequest(query); }
/// <summary> /// todoComment /// </summary> /// <param name="e"></param> /// <param name="AVerificationResult"></param> public static void VerifyLocationType(DataColumnChangeEventArgs e, out TVerificationResult AVerificationResult) { AVerificationResult = null; PLocationTypeTable DataCache_ListTable; PLocationTypeRow FoundRow; DialogResult UseAlthoughUnassignable; DataCache_ListTable = (PLocationTypeTable)TDataCache.TMPartner.GetCacheablePartnerTable(TCacheablePartnerTablesEnum.LocationTypeList); FoundRow = (PLocationTypeRow)DataCache_ListTable.Rows.Find(new Object[] { e.ProposedValue.ToString() }); if (FoundRow != null) { if (!FoundRow.Assignable) { UseAlthoughUnassignable = TMessages.MsgQuestion( ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_VALUEUNASSIGNABLE, e.ProposedValue.ToString()), new StackTrace(false).GetFrame(2).GetMethod().DeclaringType, false); if (UseAlthoughUnassignable == System.Windows.Forms.DialogResult.No) { AVerificationResult = new TVerificationResult("", "", "", PetraErrorCodes.ERR_VALUEUNASSIGNABLE, TResultSeverity.Resv_Noncritical); } } else { if (e.ProposedValue.ToString().EndsWith(SharedConstants.SECURITY_CAN_LOCATIONTYPE) && (!UserInfo.GUserInfo.IsInGroup(SharedConstants.PETRAGROUP_ADDRESSCAN))) { TMessages.MsgGeneralError( String.Format(StrErrorTheCodeIsNotAssignableSecurity, e.ProposedValue, SharedConstants.PETRAGROUP_ADDRESSCAN), MCommonResourcestrings.StrValueUnassignable, PetraErrorCodes.ERR_VALUEUNASSIGNABLE, new StackTrace(false).GetFrame(2).GetMethod().DeclaringType); AVerificationResult = new TVerificationResult("", "", "", PetraErrorCodes.ERR_VALUEUNASSIGNABLE, TResultSeverity.Resv_Noncritical); } } } }
public JsonResult Post(TMessages mes) { string query = @" select * from dbo.Contacts where email = '" + mes.email + @"' and phoneNumber = '" + mes.phone + @"' "; DataTable table = new DataTable(); table = DoSqlRequest(query); if (table.Rows.Count == 0) //если пользователя нет в бд заносим его { query = @" insert into dbo.Contacts (contactName,email,phoneNumber) values ( '" + mes.contact + @"' ,'" + mes.email + @"' ,'" + mes.phone + @"' ) "; DoSqlRequest(query); query = @" select * from dbo.Contacts where email = '" + mes.email + @"' "; table = DoSqlRequest(query); } // берём id контакта mes.contact = table.Rows[0][0].ToString(); //заносим сообщение в бд AddMessage(mes); return(new JsonResult("Added")); }
/// <summary> /// Performs checks to determine whether a deletion of the current row is permissable /// </summary> /// <param name="ARowToDelete">the currently selected row to be deleted</param> /// <param name="ADeletionQuestion">can be changed to a context-sensitive deletion confirmation question</param> /// <returns>true if user is permitted and able to delete the current row</returns> private bool PreDeleteManual(AAnalysisTypeRow ARowToDelete, ref string ADeletionQuestion) { /*Code to execute before the delete can take place*/ DataView DependentRecordsDV = new DataView(FMainDS.AFreeformAnalysis); DependentRecordsDV.RowStateFilter = DataViewRowState.CurrentRows; DependentRecordsDV.RowFilter = String.Format("{0} = '{1}'", AFreeformAnalysisTable.GetAnalysisTypeCodeDBName(), ARowToDelete.AnalysisTypeCode); if (DependentRecordsDV.Count > 0) { // Tell the user that we cannot allow deletion if any rows exist in the DataView TMessages.MsgRecordCannotBeDeletedDueToDependantRecordsError( "Analysis Type", "an Analysis Type", "Analysis Types", "Analysis Value", "an Analysis Value", "Analysis Values", ARowToDelete.AnalysisTypeCode, DependentRecordsDV.Count); return(false); } return(true); }
private void SaveDataLabelUseChanges(TTypedDataTable ASubmitChanges) { // Submit changes to the PETRAServer for the DataLabelUse table // This code is basically lifted from a typical auto-generated equivalent // TODO: If the standard code changes because TODO's get done, we will need to change this manual code TSubmitChangesResult SubmissionResult; TVerificationResultCollection VerificationResult; try { SubmissionResult = TDataCache.SaveChangedCacheableDataTableToPetraServer("DataLabelUseList", ref ASubmitChanges, out VerificationResult); } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); return; } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); return; } catch (Exception exp) { TLogging.Log( "An error occured while saving the 'used by' data" + Environment.NewLine + exp.ToString(), TLoggingType.ToLogfile); MessageBox.Show( Catalog.GetString("An error occured while saving the 'used by' data") + Environment.NewLine + Catalog.GetString("For details see the log file: ") + TLogging.GetLogFileName(), Catalog.GetString("Failed to Save 'Used By' Data"), MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server FExtraDS.PDataLabelUse.AcceptChanges(); // Merge back with data from the Server (eg. for getting Sequence values) ASubmitChanges.AcceptChanges(); FExtraDS.PDataLabelUse.Merge(ASubmitChanges, false); // need to accept the new modification ID FExtraDS.PDataLabelUse.AcceptChanges(); // need to refresh the cacheable DataTable 'DataLabelsForPartnerClassesList' (used by Partner Find's Maintain Menu) TDataCache.TMPartner.RefreshCacheablePartnerTable(TCacheablePartnerTablesEnum.DataLabelsForPartnerClassesList); return; case TSubmitChangesResult.scrNothingToBeSaved: return; case TSubmitChangesResult.scrError: MessageBox.Show(Catalog.GetString( "The 'UsedBy' part of the data could not be saved! There has been an error while making changes to the table."), Catalog.GetString("Submit Changes to Table Error"), MessageBoxButtons.OK, MessageBoxIcon.Warning); break; case TSubmitChangesResult.scrInfoNeeded: MessageBox.Show(Catalog.GetString( "The 'UsedBy' part of the data could not be saved! Insufficient information was provided when making changes to the table."), Catalog.GetString("Submit Changes to Table Error"), MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } }
/// <summary> /// Save the changes on the screen /// </summary> /// <returns></returns> public bool SaveChanges() { Boolean ReturnValue; // Be sure to fire the OnLeave event on the active control of any user control FPetraUtilsObject.ForceOnLeaveForActiveControl(); FPetraUtilsObject.OnDataSavingStart(this, new System.EventArgs()); // Don't allow saving if user is still editing a Detail of a List if (FPetraUtilsObject.InDetailEditMode()) { ReturnValue = false; return(ReturnValue); } // Clear any validation errors so that the following call to ValidateAllData starts with a 'clean slate'. FPetraUtilsObject.VerificationResultCollection.Clear(); if (ValidateAllData(false, TErrorProcessingMode.Epm_IgnoreNonCritical)) { // Ask the user about non-critical warnings, if they are the only 'errors' in the collection if (FPetraUtilsObject.VerificationResultCollection.HasOnlyNonCriticalErrors && (TDataValidation.ProcessAnyDataValidationWarnings(FPetraUtilsObject.VerificationResultCollection, MCommonResourcestrings.StrFormSaveDataAnywayQuestion, this.GetType()) == false)) { return(false); } FMainDS.AApSupplier.Rows[0].BeginEdit(); GetDataFromControls(FMainDS.AApSupplier[0]); if (FMainDS.AApSupplier[0].IsDefaultApAccountNull()) { MessageBox.Show(Catalog.GetString("Please select an AP account (eg. 9100)")); FMainDS.AApSupplier.Rows[0].EndEdit(); ReturnValue = false; return(ReturnValue); } // The account would usually be 9100-AP account. if (FMainDS.AApSupplier[0].DefaultApAccount != "9100") { if (MessageBox.Show(Catalog.GetString("You are not using the standard AP account (9100) - is this OK?"), "Verification", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { FMainDS.AApSupplier.Rows[0].EndEdit(); return(false); } } // Don't store with invalid currency value. // if (FMainDS.AApSupplier[0].CurrencyCode == "") { FMainDS.AApSupplier[0].CurrencyCode = FLedgerRow.BaseCurrency; } // If this is a foreign currency supplier, it must be linked to accounts in that currency. // (And if it's not, it mustn't be!) if (!ValidateAccountCurrency(FMainDS.AApSupplier[0].DefaultBankAccount, "Bank")) { return(false); } /* * If we wanted to have only expense accounts in a single currency, we could have this, * but that's probably not what we want... * * if (!ValidateAccountCurrency(FMainDS.AApSupplier[0].DefaultExpAccount, "Expense")) * { * return false; * } */ } ReturnValue = TDataValidation.ProcessAnyDataValidationErrors(false, FPetraUtilsObject.VerificationResultCollection, this.GetType()); if (ReturnValue) { // Fire the DataSavingValidated event, which is the last chance to cancel the save System.ComponentModel.CancelEventArgs eCancel = new System.ComponentModel.CancelEventArgs(false); FPetraUtilsObject.OnDataSavingValidated(this, eCancel); if (eCancel.Cancel == true) { return(false); } foreach (DataTable InspectDT in FMainDS.Tables) { foreach (DataRow InspectDR in InspectDT.Rows) { InspectDR.EndEdit(); } } if (FPetraUtilsObject.HasChanges) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataInProgress); this.Cursor = Cursors.WaitCursor; AccountsPayableTDS SubmitDS = FMainDS.GetChangesTyped(true); TSubmitChangesResult SubmissionResult; TVerificationResultCollection VerificationResult = new TVerificationResultCollection(); // Submit changes to the PETRAServer try { SubmissionResult = FUIConnector.SubmitChanges(ref SubmitDS); } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (Exception) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); throw; } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server FMainDS.AcceptChanges(); // Merge back with data from the Server (eg. for getting Sequence values) if (SubmitDS != null) { FMainDS.Merge(SubmitDS, false); // need to accept the new modification ID FMainDS.AcceptChanges(); } // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataSuccessful); this.Cursor = Cursors.Default; // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); TFormsMessage broadcastMessage = new TFormsMessage(TFormsMessageClassEnum.mcAPSupplierChanged); TFormsList.GFormsList.BroadcastFormMessage(broadcastMessage); ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrError: this.Cursor = Cursors.Default; FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataErrorOccured); MessageBox.Show(Messages.BuildMessageFromVerificationResult(null, VerificationResult)); FPetraUtilsObject.SubmitChangesContinue = false; ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrNothingToBeSaved: this.Cursor = Cursors.Default; FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrInfoNeeded: // TODO scrInfoNeeded this.Cursor = Cursors.Default; break; } } else { // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); this.Cursor = Cursors.Default; FPetraUtilsObject.DisableSaveButton(); // We don't have unsaved changes anymore FPetraUtilsObject.HasChanges = false; ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); } } else { FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(false)); } return(ReturnValue); }
/// <summary> /// save the changes on the screen (code is copied from auto-generated code) /// </summary> /// <returns></returns> public bool SaveChanges() { bool ReturnValue = false; FPetraUtilsObject.OnDataSavingStart(this, new System.EventArgs()); if (FPetraUtilsObject.VerificationResultCollection.Count == 0) { foreach (DataRow InspectDR in FMainDS.MExtract.Rows) { InspectDR.EndEdit(); } if (!FPetraUtilsObject.HasChanges) { return(true); } else { FPetraUtilsObject.WriteToStatusBar("Saving data..."); this.Cursor = Cursors.WaitCursor; TSubmitChangesResult SubmissionResult; //Ict.Common.Data.TTypedDataTable SubmitDT = FMainDS.MExtract.GetChangesTyped(); MExtractTable SubmitDT = new MExtractTable(); ExtractTDSMExtractTable ChangesDT = FMainDS.MExtract.GetChangesTyped(); if (ChangesDT != null) { SubmitDT.Merge(ChangesDT); } else { SubmitDT = null; } if (SubmitDT == null) { // There is nothing to be saved. // Update UI FPetraUtilsObject.WriteToStatusBar(Catalog.GetString("There is nothing to be saved.")); this.Cursor = Cursors.Default; // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); return(true); } // Submit changes to the PETRAServer try { SubmissionResult = TRemote.MPartner.Partner.WebConnectors.SaveExtract (FExtractId, ref SubmitDT); } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (Exception) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); throw; } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server FMainDS.MExtract.AcceptChanges(); // Merge back with data from the Server (eg. for getting Sequence values) FMainDS.MExtract.Merge(SubmitDT, false); // need to accept the new modification ID FMainDS.MExtract.AcceptChanges(); // Update UI FPetraUtilsObject.WriteToStatusBar("Data successfully saved."); this.Cursor = Cursors.Default; // TODO EnableSave(false); // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); SetPrimaryKeyReadOnly(true); // refresh extract master screen if it is open TFormsMessage BroadcastMessage = new TFormsMessage(TFormsMessageClassEnum.mcExtractCreated); BroadcastMessage.SetMessageDataName(ExtractName); TFormsList.GFormsList.BroadcastFormMessage(BroadcastMessage); this.Focus(); // keeps the focus on the current form // TODO OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(true); case TSubmitChangesResult.scrError: // TODO scrError this.Cursor = Cursors.Default; break; case TSubmitChangesResult.scrNothingToBeSaved: // TODO scrNothingToBeSaved this.Cursor = Cursors.Default; return(true); case TSubmitChangesResult.scrInfoNeeded: // TODO scrInfoNeeded this.Cursor = Cursors.Default; break; } } } return(false); }
/// <summary> /// save the changes on the screen /// </summary> /// <returns></returns> public bool SaveChanges() { Boolean ReturnValue; FPetraUtilsObject.OnDataSavingStart(this, new System.EventArgs()); // Don't allow saving if user is still editing a Detail of a List if (FPetraUtilsObject.InDetailEditMode()) { ReturnValue = false; return(ReturnValue); } // Clear any validation errors so that the following call to ValidateAllData starts with a 'clean slate'. FPetraUtilsObject.VerificationResultCollection.Clear(); if (ValidateAllData(false, true)) { FMainDS.AApSupplier.Rows[0].BeginEdit(); GetDataFromControls(FMainDS.AApSupplier[0]); if (FMainDS.AApSupplier[0].IsDefaultApAccountNull()) { MessageBox.Show(Catalog.GetString("Please select an AP account (eg. 9100)")); FMainDS.AApSupplier.Rows[0].EndEdit(); ReturnValue = false; return(ReturnValue); } // The account would usually be 9100-AP account. if (FMainDS.AApSupplier[0].DefaultApAccount != "9100") { if (MessageBox.Show(Catalog.GetString("You are not using the standard AP account (9100) - is this OK?"), "Verification", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { FMainDS.AApSupplier.Rows[0].EndEdit(); return(false); } } // Don't store with invalid currency value. // if (FMainDS.AApSupplier[0].CurrencyCode == "") { FMainDS.AApSupplier[0].CurrencyCode = FLedgerRow.BaseCurrency; } // If this is a foreign currency supplier, it must be linked to accounts in that currency. // (And if it's not, it mustn't be!) if (!ValidateAccountCurrency(FMainDS.AApSupplier[0].DefaultBankAccount, "Bank")) { return(false); } /* * If we wanted to have only expense accounts in a single currency, we could have this, * but that's probably not what we want... * * if (!ValidateAccountCurrency(FMainDS.AApSupplier[0].DefaultExpAccount, "Expense")) * { * return false; * } */ } ReturnValue = TDataValidation.ProcessAnyDataValidationErrors(false, FPetraUtilsObject.VerificationResultCollection, this.GetType()); if (ReturnValue) { foreach (DataTable InspectDT in FMainDS.Tables) { foreach (DataRow InspectDR in InspectDT.Rows) { InspectDR.EndEdit(); } } if (FPetraUtilsObject.HasChanges) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataInProgress); this.Cursor = Cursors.WaitCursor; AccountsPayableTDS SubmitDS = FMainDS.GetChangesTyped(true); TSubmitChangesResult SubmissionResult; TVerificationResultCollection VerificationResult = new TVerificationResultCollection(); // Submit changes to the PETRAServer try { SubmissionResult = FUIConnector.SubmitChanges(ref SubmitDS); } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (Exception exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TLogging.Log( Catalog.GetString( "An error occurred while trying to connect to the OpenPetra Server!") + Environment.NewLine + exp.ToString(), TLoggingType.ToLogfile); MessageBox.Show( Catalog.GetString("An error occurred while trying to connect to the OpenPetra Server!") + Environment.NewLine + "For details see the log file: " + TLogging.GetLogFileName(), "Server connection error", MessageBoxButtons.OK, MessageBoxIcon.Stop); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server FMainDS.AcceptChanges(); // Merge back with data from the Server (eg. for getting Sequence values) FMainDS.Merge(SubmitDS, false); // need to accept the new modification ID FMainDS.AcceptChanges(); // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataSuccessful); this.Cursor = Cursors.Default; // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrError: this.Cursor = Cursors.Default; FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataErrorOccured); MessageBox.Show(Messages.BuildMessageFromVerificationResult(null, VerificationResult)); FPetraUtilsObject.SubmitChangesContinue = false; ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrNothingToBeSaved: this.Cursor = Cursors.Default; FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); break; case TSubmitChangesResult.scrInfoNeeded: // TODO scrInfoNeeded this.Cursor = Cursors.Default; break; } } else { // Update UI FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataNothingToSave); this.Cursor = Cursors.Default; FPetraUtilsObject.DisableSaveButton(); // We don't have unsaved changes anymore FPetraUtilsObject.HasChanges = false; ReturnValue = true; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); } } else { FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(false)); } return(ReturnValue); }
/// <summary> /// save the changes on the screen (code is copied from auto-generated code) /// </summary> /// <returns></returns> public bool SaveChanges() { bool ReturnValue = false; FPetraUtilsObject.OnDataSavingStart(this, new System.EventArgs()); if (ValidateAllData(false, Common.Verification.TErrorProcessingMode.Epm_IgnoreNonCritical)) { foreach (DataRow InspectDR in FMainDS.MExtractMaster.Rows) { InspectDR.EndEdit(); } if (!FPetraUtilsObject.HasChanges) { return(true); } else { FPetraUtilsObject.WriteToStatusBar("Saving data..."); this.Cursor = Cursors.WaitCursor; TSubmitChangesResult SubmissionResult; MExtractMasterTable SubmitDT = new MExtractMasterTable(); if (FMainDS.MExtractMaster.GetChangesTyped() != null) { SubmitDT.Merge(FMainDS.MExtractMaster.GetChangesTyped()); } else { // There is nothing to be saved. // Update UI FPetraUtilsObject.WriteToStatusBar(Catalog.GetString("There is nothing to be saved.")); this.Cursor = Cursors.Default; // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); return(true); } // Submit changes to the PETRAServer try { SubmissionResult = TRemote.MPartner.Partner.WebConnectors.SaveExtractMaster (ref SubmitDT); } catch (ESecurityDBTableAccessDeniedException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgSecurityException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (EDBConcurrencyException Exp) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; TMessages.MsgDBConcurrencyException(Exp, this.GetType()); ReturnValue = false; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(ReturnValue); } catch (Exception) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataException); this.Cursor = Cursors.Default; FPetraUtilsObject.OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); throw; } switch (SubmissionResult) { case TSubmitChangesResult.scrOK: // Call AcceptChanges to get rid now of any deleted columns before we Merge with the result from the Server FMainDS.MExtractMaster.AcceptChanges(); // Merge back with data from the Server (eg. for getting Sequence values) FMainDS.MExtractMaster.Merge(SubmitDT, false); // need to accept the new modification ID FMainDS.MExtractMaster.AcceptChanges(); // Update UI FPetraUtilsObject.WriteToStatusBar("Data successfully saved."); this.Cursor = Cursors.Default; // TODO EnableSave(false); // We don't have unsaved changes anymore FPetraUtilsObject.DisableSaveButton(); SetPrimaryKeyReadOnly(true); // TODO OnDataSaved(this, new TDataSavedEventArgs(ReturnValue)); return(true); case TSubmitChangesResult.scrError: // TODO scrError this.Cursor = Cursors.Default; break; case TSubmitChangesResult.scrNothingToBeSaved: // TODO scrNothingToBeSaved this.Cursor = Cursors.Default; return(true); case TSubmitChangesResult.scrInfoNeeded: // TODO scrInfoNeeded this.Cursor = Cursors.Default; break; } } } return(false); }
/// <summary> /// Verifies the Date value. /// </summary> /// <param name="AValueText">the new value of the textbox</param> /// <param name="AShowVerificationError">Set to true to show errors if verification /// failed, or to false to suppress error messages</param> /// <returns>true if the Control has a valid date</returns> private Boolean VerifyDate(string AValueText, Boolean AShowVerificationError) { TVerificationResult DateVerificationResult = null; if (!FAllowVerification) { return(true); } if (CountVerifyDateRunningInstances > 0) { // the LostFocus and the DateValidated events overlap, and would display too messageboxes if the text can not be parsed for a date return(false); } CountVerifyDateRunningInstances++; try { // Convert TextBox's Text to Date DateTime Text2Date = DataBinding.LongDateStringToDateTime2( AValueText, FDateDescription, out DateVerificationResult, AShowVerificationError, null); if (DateVerificationResult != null) { // Date conversion was NOT successful return(false); } else { // Conversion was successful if (!AllowFutureDate) { DateVerificationResult = TDateChecks.IsCurrentOrPastDate(Text2Date, FDateDescription); if (DateVerificationResult != null) { if (AShowVerificationError) { // Show appropriate Error Message to the user TMessages.MsgGeneralError(DateVerificationResult, this.FindForm().GetType()); } return(false); } } if (!AllowPastDate) { DateVerificationResult = TDateChecks.IsCurrentOrFutureDate(Text2Date, FDateDescription); if (DateVerificationResult != null) { if (AShowVerificationError) { // Show appropriate Error Message to the user TMessages.MsgGeneralError(DateVerificationResult, this.FindForm().GetType()); } return(false); } } if (!FAllowEmpty) { DateVerificationResult = TDateChecks.IsNotUndefinedDateTime(Text2Date, FDateDescription); if (DateVerificationResult != null) { if (AShowVerificationError) { // Show appropriate Error Message to the user TMessages.MsgGeneralError(DateVerificationResult, this.FindForm().GetType()); } return(false); } } // Store the Date for later use if (Text2Date != DateTime.MinValue) { FDate = Text2Date; } else { FDate = null; } // set tag to "SuppressChangeDetection" so text change is not detected by TFrmPetraEditUtils.MultiEventHandler object OriginalTag = this.Tag; this.Tag = MCommonResourcestrings.StrCtrlSuppressChangeDetection; FSuppressTextChangeEvent = true; // Now update the TextBox's Text with the newly formatted date if (FDate != null) { if (DateTime.Compare(minimalDateValue, FDate.Value) > 0) { TMessages.DateValueMessageMinUnderrun(minimalDateValue); } if (DateTime.Compare(FDate.Value, maximalDateValue) > 0) { TMessages.DateValueMessageMaxOverrun(maximalDateValue); } String NewText = DataBinding.DateTimeToLongDateString2(FDate.Value); if (this.Text != NewText) // Don't set anything that's unchanged { base.Text = NewText; // I'm not calling my own Text Property, because I don't want to end up back here... } } else { if (this.Text != "") // Don't set anything that's unchaged { base.Text = ""; // I'm not calling my own Text Property, because I don't want to end up back here... } } // reset tag to original state this.Tag = OriginalTag; FSuppressTextChangeEvent = false; return(true); } } finally { FDateVerificationResult = DateVerificationResult; CountVerifyDateRunningInstances--; } }
/// <summary> /// todoComment /// </summary> /// <param name="AChangingPartnerTypeRow"></param> /// <param name="AIsRemoval"></param> /// <returns></returns> public Boolean PerformPartnerTypeAddOrRemoval(DataRow AChangingPartnerTypeRow, out Boolean AIsRemoval) { const String TYPECODE_COSTCENTRE = "COSTCENTRE"; Boolean ReturnValue = false; AIsRemoval = false; String TypeCode; DataRow ExistingMatchingDataRow; PPartnerTypeTable PartnerTypeTable; PPartnerTypeRow TheNewRow; PTypeRow CheckTypeRow; DataRowView[] CheckTypeRows; DialogResult CheckTypeRowsAnswer; TRecalculateScreenPartsEventArgs RecalculateScreenPartsEventArgs; String CostCentreLink; PartnerTypeTable = FMainDS.PPartnerType; try { TypeCode = AChangingPartnerTypeRow["TypeCode"].ToString(); ExistingMatchingDataRow = PartnerTypeTable.Rows.Find(new Object[] { ((PPartnerRow)FMainDS.PPartner.Rows[0]).PartnerKey, TypeCode }); if (ExistingMatchingDataRow == null) { /* * Add Special Type */ // Check security permission if (!UserInfo.GUserInfo.IsTableAccessOK(TTableAccessPermission.tapCREATE, PPartnerTypeTable.GetTableDBName())) { TMessages.MsgSecurityException(new ESecurityDBTableAccessDeniedException("", "create", PPartnerTypeTable.GetTableDBName()), this.GetType()); AChangingPartnerTypeRow.CancelEdit(); // reset to unchecked return(false); } // Check: is this Partner Type assignable? // MessageBox.Show("Perform check: is PartnerType assignable? TypeCode: " + TypeCode); CheckTypeRows = FDataCache_PartnerTypeListDV.FindRows(TypeCode); if (CheckTypeRows.Length > 0) { CheckTypeRow = (PTypeRow)CheckTypeRows[0].Row; if (!CheckTypeRow.ValidType) { /*CheckTypeRowsAnswer = TMessages.MsgQuestion( * ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_VALUEUNASSIGNABLE, TypeCode), * this.GetType(), false);*/ CheckTypeRowsAnswer = MessageBox.Show( string.Format(StrTheCodeIsNoLongerActive, TypeCode), Catalog.GetString("Invalid Data Entered"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (CheckTypeRowsAnswer == DialogResult.No) { // reset to unchecked AChangingPartnerTypeRow.CancelEdit(); return(false); } } } // add new row to PartnerType table PartnerTypeTable = FMainDS.PPartnerType; TheNewRow = PartnerTypeTable.NewRowTyped(); TheNewRow.PartnerKey = FMainDS.PPartner[0].PartnerKey; TheNewRow.TypeCode = TypeCode; TheNewRow.CreatedBy = UserInfo.GUserInfo.UserID; TheNewRow.DateCreated = DateTime.Now.Date; PartnerTypeTable.Rows.Add(TheNewRow); // Fire OnRecalculateScreenParts event RecalculateScreenPartsEventArgs = new TRecalculateScreenPartsEventArgs(); RecalculateScreenPartsEventArgs.ScreenPart = TScreenPartEnum.spCounters; OnRecalculateScreenParts(RecalculateScreenPartsEventArgs); ReturnValue = true; AIsRemoval = false; } else { /* * Remove Special Type */ // Check security permission if (!UserInfo.GUserInfo.IsTableAccessOK(TTableAccessPermission.tapDELETE, PPartnerTypeTable.GetTableDBName())) { TMessages.MsgSecurityException(new ESecurityDBTableAccessDeniedException("", "delete", PPartnerTypeTable.GetTableDBName()), this.GetType()); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } // perform check: If COSTCENTRE is to be removed then check whether Partner has a link to costcentre set up if (TypeCode == TYPECODE_COSTCENTRE) { try { if (FPartnerEditUIConnector.HasPartnerCostCentreLink(out CostCentreLink)) { MessageBox.Show(String.Format(StrPartnerHasCostCentreLink, CostCentreLink, StrPartnerHasCostCentreLinkTitle)); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } } catch (ESecurityAccessDeniedException Exp) { TMessages.MsgSecurityException(Exp, this.GetType()); MessageBox.Show(StrSecurityPreventsRemoval, StrSecurityPreventsRemovalTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); // reset to checked AChangingPartnerTypeRow.CancelEdit(); return(false); } catch (Exception) { throw; } } // Delete row from PartnerType table ExistingMatchingDataRow.Delete(); // Fire OnRecalculateScreenParts event RecalculateScreenPartsEventArgs = new TRecalculateScreenPartsEventArgs(); RecalculateScreenPartsEventArgs.ScreenPart = TScreenPartEnum.spCounters; OnRecalculateScreenParts(RecalculateScreenPartsEventArgs); ReturnValue = true; AIsRemoval = true; } /* * Check if this change could be applied to Family Members */ // TODO PartnerTypeFamilyMembersPropagationSelectionWinForm Dialog still missing #if TODO if (SharedTypes.PartnerClassStringToEnum(FMainDS.PPartner[0].PartnerClass) == TPartnerClass.FAMILY) { if (HasFamilyFamilyMembers()) { if (FDelegatePartnerTypePropagationSelection != null) { if (!AIsRemoval) { FMainDS.Merge(FDelegatePartnerTypePropagationSelection(TypeCode, "ADD")); } else { FMainDS.Merge(FDelegatePartnerTypePropagationSelection(TypeCode, "DELETE")); } } } } #endif } catch (Exception E) { MessageBox.Show(E.ToString()); ReturnValue = false; } return(ReturnValue); }
/// <summary> /// todoComment /// </summary> /// <param name="AParseDate"></param> /// <param name="ADescription"></param> /// <param name="AParsedDate"></param> /// <param name="AShowVerificationError"></param> /// <param name="ATypeWhichCallsVerification"></param> /// <returns></returns> private static Boolean LongDateStringToDateTimeInternal(String AParseDate, String ADescription, out object AParsedDate, Boolean AShowVerificationError, System.Type ATypeWhichCallsVerification) { Boolean ReturnValue; Int32 DayOffset; String TmpYear; String TmpMonth; String TmpDay; String TmpMonthDayExchange = ""; String TmpShortDatePattern; Int16 YearStart = 0; Int16 RestStart = 0; // see StringHelper.DateToLocalizedString // Mono and .Net return different strings for month of March in german culture TExecutingOSEnum OSVersion = Utilities.DetermineExecutingOS(); bool IsPossiblyWin10 = ((OSVersion == TExecutingOSEnum.eosWin8Plus) || (OSVersion == TExecutingOSEnum.eosWin10)); string CurrentCulture = Thread.CurrentThread.CurrentCulture.ToString(); List <string> CulturesToIgnore = new List <string>(); CulturesToIgnore.Add("de-BE"); CulturesToIgnore.Add("de-CH"); CulturesToIgnore.Add("de-LI"); CulturesToIgnore.Add("de-LU"); if ((CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "de") && !(CurrentCulture == "de-AT") && !(IsPossiblyWin10 && CulturesToIgnore.Contains(CurrentCulture))) { AParseDate = AParseDate.Replace("MÄR", "MRZ"); } AParsedDate = null; DateTimeFormatInfo CurrentDateTimeFormatInfo; ReturnValue = false; try { // TODO: implement parsing of localised short month names like 4GL does (according to user's default language setting), eg. accept 'M�R' instead of 'MAR' for March if the user's language setting is DE (German) // MessageBox.Show('AParseDate: ' + AParseDate); if (TDateChecks.IsValidDateTime(AParseDate, "") != null) { // MessageBox.Show('No regular DateTime'); if ((AParseDate.StartsWith("-")) || ((AParseDate.StartsWith("+")) && (AParseDate.Length != 1))) { // MessageBox.Show('Calculating date from the amount that follows the + or sign...'); // calculate date from the amount that follows the + or sign if (TNumericalChecks.IsValidInteger(AParseDate.Substring(1), "") == null) { DayOffset = System.Convert.ToInt32(AParseDate.Substring(1)); // MessageBox.Show('DayOffset: ' + DayOffset.ToString); if (AParseDate.StartsWith("+")) { AParseDate = DateTime.Now.Date.AddDays(DayOffset).ToString("D"); } else { AParseDate = DateTime.Now.Date.Subtract(new TimeSpan(DayOffset, 0, 0, 0)).ToString("D"); } } else { // characters following the + or are not an Int32 if (AShowVerificationError) { TMessages.MsgGeneralError(TDateChecks.GetInvalidDateVerificationResult(ADescription), ATypeWhichCallsVerification); } return(ReturnValue); } } else if ((AParseDate.Length <= 8) && (AParseDate.Length != 1) && (TNumericalChecks.IsValidInteger(AParseDate, "") == null)) { // MessageBox.Show("Checking for dates entered like eg. 211105 or 21112005 ..."); /* * Checking for dates entered like eg. 211105 or 21112005. * * Notes: * Petra.NET accepts date entry dependent on current Culture * (=settings are taken from Windows Control Panel -> Regional and * Language Options). * However, 4GL Petra parses dates according to the server-wide setting * '-d'in startup.pf (Progress home directory). This should normally be * the same than the Windows Control Panel setting on the user's * machines, so there should be no deviation. */ CurrentDateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo; TmpShortDatePattern = CurrentDateTimeFormatInfo.ShortDatePattern.ToUpper(); if (TmpShortDatePattern.StartsWith("Y")) { YearStart = 0; switch (AParseDate.Length) { case 8: RestStart = 4; break; case 6: RestStart = 2; break; case 4: RestStart = 0; YearStart = -1; break; } } else { RestStart = 0; switch (AParseDate.Length) { case 6: case 8: YearStart = 4; break; case 4: YearStart = -1; break; } } //MessageBox.Show("TmpShortDatePattern: " + TmpShortDatePattern + "; TmpDateSeparator: " + TmpDateSeparator + // "\r\nYearStart: " + YearStart.ToString() + "; RestStart: " + RestStart.ToString()); if (AParseDate.Length <= 6) { if (YearStart != -1) { TmpYear = AParseDate.Substring(YearStart, 2); // Determine the correct century for twodigit years. // For compatibility reasons: This is the way how it's done in 4GL, // in sp_date.p/ConvertStringToDate if (Convert.ToInt32(TmpYear) < 80) { TmpYear = "20" + TmpYear; } else if (Convert.ToInt32(TmpYear) < 100) { TmpYear = "19" + TmpYear; } // // This would be the Windows way of doing it... // I (ChristianK) found no way to retrieve the correct century from // .NET, so it's hardcoded here, taking the default values of Windows // XP :( // // if Convert.ToInt32(TmpYear) <= 29 then // begin // TmpYear := '20' + TmpYear; // end // else // begin // TmpYear := '19' + TmpYear; // end; } else { TmpYear = DateTime.Now.Year.ToString(); } } else { TmpYear = AParseDate.Substring(YearStart, 4); } if ((AParseDate.Length == 4) || (AParseDate.Length == 6) || (AParseDate.Length == 8)) { if (TmpShortDatePattern.IndexOf('M') < TmpShortDatePattern.IndexOf('D')) { TmpMonth = AParseDate.Substring(RestStart, 2); TmpDay = AParseDate.Substring(RestStart + 2, 2); } else { TmpDay = AParseDate.Substring(RestStart, 2); TmpMonth = AParseDate.Substring(RestStart + 2, 2); } } else { // format with other number of digits not supported if (AShowVerificationError) { TMessages.MsgGeneralError(TDateChecks.GetInvalidDateVerificationResult(ADescription), ATypeWhichCallsVerification); } return(ReturnValue); } if (Convert.ToInt16(TmpMonth) > 12) { TmpMonthDayExchange = TmpMonth; TmpMonth = TmpDay; TmpDay = TmpMonthDayExchange; } // AParseDate := TmpYear + TmpDateSeparator + TmpMonth + TmpDateSeparator + TmpDay; For testing purposes // MessageBox.Show('AParseDate (1): ' + AParseDate); For testing purposes try { // TmpMonth + '/' + TmpDay + '/' + TmpYear; AParseDate = new DateTime(Convert.ToInt32(TmpYear), Convert.ToInt32(TmpMonth), Convert.ToInt32(TmpDay)).ToString("D"); if (TmpMonthDayExchange != "") { MessageBox.Show(StrMonthDayExchangedInfo, StrMonthDayExchangedInfoTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception) { if (AShowVerificationError) { TMessages.MsgGeneralError(TDateChecks.GetInvalidDateVerificationResult(ADescription), ATypeWhichCallsVerification); } return(ReturnValue); } //MessageBox.Show("TmpShortDatePattern: " + TmpShortDatePattern + "; TmpDateSeparator: " + TmpDateSeparator + // "\r\nYearStart: " + YearStart.ToString() + "; RestStart: " + RestStart.ToString() + //"; TmpDay: " + TmpDay + "; TmpMonth: " + TmpMonth + "; TmpYear: " + TmpYear + "\r\nAParseDate: " + AParseDate); AParsedDate = AParseDate; ReturnValue = true; return(ReturnValue); } else if (AParseDate == string.Empty) { AParsedDate = DBNull.Value; ReturnValue = true; return(ReturnValue); } else if ((AParseDate == "=") || (AParseDate == "+") || (AParseDate.ToLower() == Catalog.GetString("today").ToLower())) { AParsedDate = DateTime.Now.ToString("D"); ReturnValue = true; return(ReturnValue); } else { if (AShowVerificationError) { // not an accepted date parse string TMessages.MsgGeneralError(TDateChecks.GetInvalidDateVerificationResult(ADescription), ATypeWhichCallsVerification); } return(ReturnValue); } } // AParseDate ready to be parsed AParsedDate = DateTime.Parse(AParseDate).ToString("D"); ReturnValue = true; } catch (Exception /* Exp */) { if (AShowVerificationError) { TMessages.MsgGeneralError(TDateChecks.GetInvalidDateVerificationResult(ADescription), ATypeWhichCallsVerification); } } return(ReturnValue); }