/// <summary> /// Получить сравнение рег.номера с шаблоном. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="date">Дата.</param> /// <param name="registrationNumber">Рег. номер.</param> /// <param name="indexTemplate">Шаблон номера.</param> /// <param name="departmentCode">Код подразделения.</param> /// <param name="businessUnitCode">Код нашей организации.</param> /// <param name="caseFileIndex">Индекс дела.</param> /// <param name="docKindCode">Код вида документа.</param> /// <param name="counterpartyCode">Код контрагента.</param> /// <param name="leadDocNumber">Номер ведущего документа.</param> /// <param name="numberPostfix">Постфикс номера.</param> /// <param name="additionalPrefix">Дополнительный префикс номера.</param> /// <returns>Индекс.</returns> internal static Match GetRegexMatchFromRegistrationNumber(IDocumentRegister documentRegister, DateTime date, string registrationNumber, string indexTemplate, string departmentCode, string businessUnitCode, string caseFileIndex, string docKindCode, string counterpartyCode, string leadDocNumber, string numberPostfix, string additionalPrefix) { var prefixAndPostfix = Functions.DocumentRegister.GenerateRegistrationNumberPrefixAndPostfix(documentRegister, date, leadDocNumber, departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, true); var template = string.Format("{0}{1}{2}{3}", Regex.Escape(prefixAndPostfix.Prefix), indexTemplate, Regex.Escape(prefixAndPostfix.Postfix), numberPostfix); // Заменить метасимвол для кода контрагента на соответствующее регулярное выражение. var metaCounterpartyCode = Regex.Escape(DocumentRegisters.Resources.NumberFormatCounterpartyCode); template = template.Replace(metaCounterpartyCode, Constants.DocumentRegister.CounterpartyCodeRegex); // Совпадение в начале строки. var numberTemplate = string.Format("^{0}", template); var match = Regex.Match(registrationNumber, numberTemplate); if (match.Success) { return(match); } // Совпадение в конце строки. numberTemplate = string.Format("{0}{1}$", additionalPrefix, template); return(Regex.Match(registrationNumber, numberTemplate)); }
/// <summary> /// Сформировать ошибку валидации. /// </summary> /// <param name="documentRegister">Журнал регистрации.</param> /// <param name="errorModel">Шаблон ошибки.</param> /// <returns>Ошибка валидации.</returns> public static string CreateValidationError(IDocumentRegister documentRegister, string errorModel) { if (documentRegister.RegisterType == Docflow.DocumentRegister.RegisterType.Numbering) { return(string.Format(errorModel, Docflow.Resources.numberWord)); } else { return(string.Format(errorModel, Docflow.Resources.registerWord)); } }
public static bool HasRegisteredDocuments(IDocumentRegister documentRegister) { var command = string.Format(Queries.DocumentRegister.HasRegisteredDocuments, documentRegister.Id); var executionResult = Docflow.PublicFunctions.Module.ExecuteScalarSQLCommand(command); var result = 0; if (!(executionResult is DBNull) && executionResult != null) { int.TryParse(executionResult.ToString(), out result); } return(result != 0); }
/// <summary> /// Проверить совпадение рег.номеров. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="date">Дата.</param> /// <param name="registrationNumber">Рег. номер.</param> /// <param name="departmentCode">Код подразделения.</param> /// <param name="businessUnitCode">Код нашей организации.</param> /// <param name="caseFileIndex">Индекс дела.</param> /// <param name="docKindCode">Код вида документа.</param> /// <param name="counterpartyCode">Код контрагента.</param> /// <param name="leadDocNumber">Номер ведущего документа.</param> /// <param name="registrationNumberSample">Пример рег. номера.</param> /// <param name="searchCorrectingPostfix">Искать корректировочный постфикс.</param> /// <returns>True, если совпадают.</returns> /// <remarks>Пример: 5/1-П/2020, где 5 - порядковый номер, П - индекс журнала, 2020 - год, /1 - корректировочный постфикс.</remarks> public static bool IsEqualsRegistrationNumbers(IDocumentRegister documentRegister, DateTime date, string registrationNumber, string departmentCode, string businessUnitCode, string caseFileIndex, string docKindCode, string counterpartyCode, string leadDocNumber, string registrationNumberSample, bool searchCorrectingPostfix) { var indexAndPostfix = ParseRegistrationNumber(documentRegister, date, registrationNumberSample, departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, leadDocNumber, searchCorrectingPostfix); var maxLeadZeroIndexCount = 9 - indexAndPostfix.Index.ToString().Count(); var indexRegexTemplate = "[0]{0," + maxLeadZeroIndexCount + "}" + indexAndPostfix.Index + Regex.Escape(indexAndPostfix.CorrectingPostfix); return(GetRegexMatchFromRegistrationNumber(documentRegister, date, registrationNumber, indexRegexTemplate, departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, leadDocNumber, indexAndPostfix.Postfix + "$", "^").Success); }
public static IQueryable <IContractualDocument> GetFilteredRegisteredDocuments( string number, DateTime?dateFrom, DateTime?dateTo, IDocumentRegister documentRegister, ICaseFile caseFile, IEmployee responsibleEmployee) { if (dateTo != null) { dateTo = dateTo.Value.AddDays(1); } return(ContractualDocuments.GetAll() .Where(l => number == null || l.RegistrationNumber.Contains(number)) .Where(l => dateFrom == null || l.RegistrationDate >= dateFrom) .Where(l => dateTo == null || l.RegistrationDate < dateTo) .Where(l => documentRegister == null || l.DocumentRegister.Equals(documentRegister)) .Where(l => caseFile == null || l.CaseFile.Equals(caseFile)) .Where(l => responsibleEmployee == null || l.ResponsibleEmployee.Equals(responsibleEmployee))); }
public string[] GetPeriods(IDocumentRegister documentRegister) { var currentPeriods = new List <string> { Sungero.Docflow.Reports.Resources.SkippedNumbersReport.CurrentYear, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.CurrentQuarter, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.CurrentMonth, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.CurrentWeek }; var previousPeriods = new List <string> { Sungero.Docflow.Reports.Resources.SkippedNumbersReport.PreviousYear, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.PreviousQuarter, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.PreviousMonth, Sungero.Docflow.Reports.Resources.SkippedNumbersReport.PreviousWeek }; var skipPeriods = 0; var takePeriods = 3; if (documentRegister != null && documentRegister.NumberingPeriod.Value == Sungero.Docflow.DocumentRegister.NumberingPeriod.Month) { skipPeriods = 2; takePeriods = 2; } if (documentRegister != null && documentRegister.NumberingPeriod.Value == Sungero.Docflow.DocumentRegister.NumberingPeriod.Quarter) { skipPeriods = 1; } var result = new List <string>(); result.AddRange(currentPeriods.Skip(skipPeriods).Take(takePeriods)); result.AddRange(previousPeriods.Skip(skipPeriods).Take(takePeriods)); return(result.ToArray()); }
/// <summary> /// Проверить заполненность дела. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="document">Документ.</param> /// <returns>Текст ошибки, либо string.Empty.</returns> public static string GetCaseFileValidationError(IDocumentRegister documentRegister, IOfficialDocument document) { // Проверить необходимость дела. if (documentRegister == null || !documentRegister.NumberFormatItems.Any(n => n.Element == DocumentRegisterNumberFormatItems.Element.CaseFile)) { return(string.Empty); } // Проверить наличие дела. if (document.CaseFile == null) { return(CreateValidationError(documentRegister, Docflow.Resources.FillCaseFile)); } // Проверить наличие кода у дела. if (string.IsNullOrEmpty(document.CaseFile.Index)) { return(CreateValidationError(documentRegister, Docflow.Resources.FillCaseFileCode)); } return(string.Empty); }
/// <summary> /// Проверить заполненность кода вида документа. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="document">Документ.</param> /// <returns>Текст ошибки, либо string.Empty.</returns> public static string GetDocumentKindValidationError(IDocumentRegister documentRegister, IOfficialDocument document) { // Проверить необходимость кода вида документа. if (documentRegister == null || !documentRegister.NumberFormatItems.Any(n => n.Element == DocumentRegisterNumberFormatItems.Element.DocKindCode)) { return(string.Empty); } // Проверить наличие вида документа. if (document.DocumentKind == null) { return(CreateValidationError(documentRegister, Docflow.Resources.FillDocumentKind)); } // Проверить наличие кода у вида документа. if (string.IsNullOrWhiteSpace(document.DocumentKind.Code)) { return(CreateValidationError(documentRegister, Docflow.Resources.FillDocumentKindCode)); } return(string.Empty); }
/// <summary> /// Проверить заполненность НОР и кода НОР. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="document">Документ.</param> /// <returns>Текст ошибки, либо string.Empty.</returns> public static string GetBusinessUnitValidationError(IDocumentRegister documentRegister, IOfficialDocument document) { // Проверить необходимость кода НОР. if (documentRegister == null || !documentRegister.NumberFormatItems.Any(n => n.Element == DocumentRegisterNumberFormatItems.Element.BUCode)) { return(string.Empty); } // Проверить наличие НОР. if (document.BusinessUnit == null) { return(CreateValidationError(documentRegister, Docflow.Resources.FillBusinessUnit)); } // Проверить наличие кода у НОР. if (string.IsNullOrWhiteSpace(document.BusinessUnit.Code)) { return(CreateValidationError(documentRegister, Docflow.Resources.FillBusinessUnitCode)); } return(string.Empty); }
/// <summary> /// Проверить заполненность подразделения и кода подразделения. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="document">Документ.</param> /// <returns>Текст ошибки, либо string.Empty.</returns> public static string GetDepartmentValidationError(IDocumentRegister documentRegister, IOfficialDocument document) { // Проверить необходимость кода подразделения. if (documentRegister == null || !documentRegister.NumberFormatItems.Any(n => n.Element == DocumentRegisterNumberFormatItems.Element.DepartmentCode)) { return(string.Empty); } // Проверить наличие подразделения. if (document.Department == null) { return(CreateValidationError(documentRegister, Docflow.Resources.FillDepartment)); } // Проверить наличие кода у подразделения. if (string.IsNullOrWhiteSpace(document.Department.Code)) { return(CreateValidationError(documentRegister, Docflow.Resources.FillDepartmentCode)); } return(string.Empty); }
/// <summary> /// Диалог с запросом параметров для отчетов по журналам регистрации. /// </summary> /// <param name="reportName">Наименование отчета.</param> /// <param name="direction">Направление документопотока журнала.</param> /// <param name="documentRegisterValue">Журнал.</param> /// <param name="helpCode">Код справки.</param> /// <returns>Возвращает структуру формата - запустить отчет, дата начала, дата окончания, журнал.</returns> public static Structures.Module.DocumentRegisterReportParametrs ShowDocumentRegisterReportDialog(string reportName, Enumeration direction, IDocumentRegister documentRegisterValue, string helpCode) { var personalSettings = Docflow.PublicFunctions.PersonalSetting.GetPersonalSettings(Employees.Current); var dialog = Dialogs.CreateInputDialog(reportName); dialog.HelpCode = helpCode; var settingsBeginDate = Docflow.PublicFunctions.PersonalSetting.GetStartDate(personalSettings); var beginDate = dialog.AddDate(Resources.StartDate, true, settingsBeginDate ?? Calendar.UserToday); var settingsEndDate = Docflow.PublicFunctions.PersonalSetting.GetEndDate(personalSettings); var endDate = dialog.AddDate(Resources.EndDate, true, settingsEndDate ?? Calendar.UserToday); INavigationDialogValue <IDocumentRegister> documentRegister = null; if (documentRegisterValue == null) { var documentRegisters = Functions.Module.Remote.GetFilteredDocumentRegistersForReport(direction); IDocumentRegister defaultDocumentRegister = null; if (personalSettings != null) { if (direction == Docflow.DocumentRegister.DocumentFlow.Incoming) { defaultDocumentRegister = personalSettings.IncomingDocRegister; } else if (direction == Docflow.DocumentRegister.DocumentFlow.Outgoing) { defaultDocumentRegister = personalSettings.OutgoingDocRegister; } else { defaultDocumentRegister = personalSettings.InnerDocRegister; } } if (documentRegisters.Count == 1) { documentRegister = dialog.AddSelect(Docflow.Resources.DocumentRegister, true, documentRegisters.FirstOrDefault()).From(documentRegisters); } else { documentRegister = dialog.AddSelect(Docflow.Resources.DocumentRegister, true, defaultDocumentRegister).From(documentRegisters); } } dialog.SetOnButtonClick((args) => { Docflow.PublicFunctions.Module.CheckReportDialogPeriod(args, beginDate, endDate); }); dialog.Buttons.AddOkCancel(); dialog.Buttons.Default = DialogButtons.Ok; if (dialog.Show() == DialogButtons.Ok) { if (documentRegisterValue == null) { documentRegisterValue = documentRegister.Value; } return(Structures.Module.DocumentRegisterReportParametrs.Create(true, beginDate.Value, endDate.Value, documentRegisterValue)); } else { documentRegisterValue = null; return(Structures.Module.DocumentRegisterReportParametrs.Create(false, null, null, null)); } }
public static List <IRegistrationSetting> GetByDocumentRegister(IDocumentRegister documentRegister) { return(RegistrationSettings.GetAllCached(s => s.Status == CoreEntities.DatabookEntry.Status.Active && Equals(s.DocumentRegister, documentRegister)).ToList()); }
/// <summary> /// Выделить составные части рег.номера. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="date">Дата.</param> /// <param name="registrationNumber">Рег. номер.</param> /// <param name="departmentCode">Код подразделения.</param> /// <param name="businessUnitCode">Код нашей организации.</param> /// <param name="caseFileIndex">Индекс дела.</param> /// <param name="docKindCode">Код вида документа.</param> /// <param name="counterpartyCode">Код контрагента.</param> /// <param name="leadDocNumber">Номер ведущего документа.</param> /// <param name="searchCorrectingPostfix">Искать корректировочный постфикс.</param> /// <returns>Индекс рег.номера.</returns> /// <remarks>Пример: 5/1-П/2020, где 5 - порядковый номер, П - индекс журнала, 2020 - год, /1 - корректировочный постфикс.</remarks> public static Structures.DocumentRegister.RegistrationNumberIndex ParseRegistrationNumber(IDocumentRegister documentRegister, DateTime date, string registrationNumber, string departmentCode, string businessUnitCode, string caseFileIndex, string docKindCode, string counterpartyCode, string leadDocNumber, bool searchCorrectingPostfix) { // "(.*?)" определяет место, в котором находятся искомые данные. var releasingExpression = "(.*?)$"; // Регулярное выражение для рег. индекса. // "([0-9]+)" определяет, где искать индекс в номере. // "([\.\/-][0-9]+)?" определяет, где искать корректировочный постфикс в номере. // Пустые скобки в выражении @"([0-9]+)()" означают корректировочный постфикс, // чтобы количество групп в результате регулярного выражения было всегда одинаковым, независимо от того, нужно искать корректировочный постфикс или нет. var indexExpression = searchCorrectingPostfix ? @"([0-9]+)([\.\/-][0-9]+)?" : @"([0-9]+)()"; // Распарсить рег.номер на составляющие. var registrationNumberMatch = GetRegexMatchFromRegistrationNumber(documentRegister, date, registrationNumber, indexExpression, departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, leadDocNumber, releasingExpression, string.Empty); var indexOfNumber = registrationNumberMatch.Groups[1].Value; var correctingPostfix = registrationNumberMatch.Groups[2].Value; var postfix = registrationNumberMatch.Groups[3].Value; int index; index = int.TryParse(indexOfNumber, out index) ? index : 0; return(Structures.DocumentRegister.RegistrationNumberIndex.Create(index, postfix, correctingPostfix)); }
/// <summary> /// Получить индекс рег. номера. /// </summary> /// <param name="documentRegister">Журнал.</param> /// <param name="date">Дата.</param> /// <param name="registrationNumber">Рег. номер.</param> /// <param name="departmentCode">Код подразделения.</param> /// <param name="businessUnitCode">Код нашей организации.</param> /// <param name="caseFileIndex">Индекс дела.</param> /// <param name="docKindCode">Код вида документа.</param> /// <param name="counterpartyCode">Код контрагента.</param> /// <param name="leadDocNumber">Номер ведущего документа.</param> /// <param name="searchCorrectingPostfix">Искать корректировочный постфикс.</param> /// <returns>Индекс.</returns> /// <remarks>Пример: 5/1-П/2020, где 5 - порядковый номер, П - индекс журнала, 2020 - год, /1 - корректировочный постфикс.</remarks> public static int GetIndexFromRegistrationNumber(IDocumentRegister documentRegister, DateTime date, string registrationNumber, string departmentCode, string businessUnitCode, string caseFileIndex, string docKindCode, string counterpartyCode, string leadDocNumber, bool searchCorrectingPostfix) { return(ParseRegistrationNumber(documentRegister, date, registrationNumber, departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, leadDocNumber, searchCorrectingPostfix).Index); }
public static IQueryable <IOfficialDocument> GetFilteredRegisteredDocuments( string registrationNumber, DateTime?registrationDateFrom, DateTime?registrationDateTo, IDocumentRegister documentRegister, ICaseFile caseFile, Company.IEmployee registeredBy) { var documents = OfficialDocuments.GetAll(); if (registrationNumber != null) { documents = documents.Where(l => l.RegistrationNumber.Contains(registrationNumber)); } if (registrationDateFrom != null) { documents = documents.Where(l => l.RegistrationDate >= registrationDateFrom); } if (registrationDateTo != null) { registrationDateTo = registrationDateTo.Value.Date.EndOfDay(); documents = documents.Where(l => l.RegistrationDate <= registrationDateTo); } if (documentRegister != null) { documents = documents.Where(l => Equals(l.DocumentRegister, documentRegister)); } if (caseFile != null) { documents = documents.Where(l => Equals(l.CaseFile, caseFile)); } if (registeredBy != null) { // TODO Zamerov: ересь с операциями. var regitrationOperation = new Enumeration(Docflow.PublicFunctions.OfficialDocument.GetRegistrationOperation()); documents = documents.WhereDocumentHistory(h => Equals(h.User, registeredBy) && h.Operation == regitrationOperation); } return(documents); }