Пример #1
0
        /// <summary>
        /// Скопировать дело в заданный период.
        /// </summary>
        /// <param name="startDate">Дата начала.</param>
        /// <param name="endDate">Дата конца.</param>
        /// <returns>Дело.</returns>
        public virtual ICaseFile CopyCaseFileOnNextPeriod(DateTime startDate, DateTime endDate)
        {
            var newCaseFile = CaseFiles.Copy(_obj);

            newCaseFile.Note = Sungero.Docflow.CaseFiles.Resources.AutoCreatedCaseFileNote;
            Logger.DebugFormat("CopyCaseFiles: Case File (Id {0}) copying.", _obj.Id);

            // Dmitriev_IA: Даты начала и конца целевого периода копирования формируются программно
            //              в клиентской функции GetCaseFilesCopyDialogTargetPeriod() модуля Docflow
            //              и всегда принадлежат одному году.
            var periodYear   = startDate.Year;
            var periodIsYear = startDate == Calendar.BeginningOfYear(startDate) &&
                               endDate == Calendar.EndOfYear(startDate);

            if (periodIsYear)
            {
                newCaseFile.StartDate = newCaseFile.StartDate.Value.AddYears(periodYear - newCaseFile.StartDate.Value.Year);
                newCaseFile.EndDate   = newCaseFile.EndDate.Value.AddYears(periodYear - newCaseFile.EndDate.Value.Year);

                Logger.DebugFormat("CopyCaseFiles: Case File Start Date changed {0} >> {1} ",
                                   _obj.StartDate.Value.ToShortDateString(),
                                   newCaseFile.StartDate.Value.ToShortDateString());
                Logger.DebugFormat("CopyCaseFiles: Case File End Date changed {0} >> {1} ",
                                   _obj.EndDate.Value.ToShortDateString(),
                                   newCaseFile.EndDate.Value.ToShortDateString());
            }

            newCaseFile.Save();
            return(newCaseFile);
        }
Пример #2
0
        /// <summary>
        /// Проверить индекс дела на уникальность в рамках нашей организации.
        /// </summary>
        /// <param name="periodStart">Начало периода.</param>
        /// <param name="periodEnd">Конец периода.</param>
        /// <returns>True, если индекс уникален, иначе false.</returns>
        public virtual bool CheckIndexForUniquenessInPeriod(DateTime?periodStart, DateTime?periodEnd)
        {
            var originalStartDate     = periodStart;
            var hasOriginalEndDate    = periodEnd != null;
            var originalEndDate       = hasOriginalEndDate ? periodEnd : Calendar.SqlMaxValue;
            var originalIndex         = _obj.Index;
            var originalBusinessUnit  = _obj.BusinessUnit;
            var originalDepartment    = _obj.Department;
            var hasOriginalDepartment = originalDepartment != null;

            if (originalBusinessUnit == null && hasOriginalDepartment)
            {
                originalBusinessUnit = Company.PublicFunctions.BusinessUnit.Remote.GetBusinessUnit(_obj.Department);
            }
            var originalBusinessUnitDepartmentIds = new List <int>();

            if (originalBusinessUnit != null)
            {
                originalBusinessUnitDepartmentIds = Company.PublicFunctions.BusinessUnit.Remote.GetAllDepartmentIds(originalBusinessUnit);
            }

            return(!CaseFiles.GetAll().Any(f => !Equals(f, _obj) &&
                                           f.Status.Value == CoreEntities.DatabookEntry.Status.Active &&
                                           f.Index == originalIndex &&
                                           (originalBusinessUnit == null && !hasOriginalDepartment && f.BusinessUnit == null && f.Department == null ||
                                            originalBusinessUnit == null && hasOriginalDepartment && f.BusinessUnit == null && Equals(originalDepartment, f.Department) ||
                                            originalBusinessUnit != null && f.BusinessUnit != null && Equals(originalBusinessUnit, f.BusinessUnit) ||
                                            originalBusinessUnit != null && f.BusinessUnit == null && f.Department != null && originalBusinessUnitDepartmentIds.Contains(f.Department.Id)) &&
                                           originalEndDate >= f.StartDate &&
                                           (f.EndDate != null && originalStartDate <= f.EndDate ||
                                            f.EndDate == null)));
        }
Пример #3
0
        /// <summary>
        /// Получить дела для копирования.
        /// </summary>
        /// <param name="sourcePeriodStartDate">Начало исходного периода.</param>
        /// <param name="sourcePeriodEndDate">Конец исходного периода.</param>
        /// <param name="businessUnitId">ИД нашей организации.</param>
        /// <param name="departmentId">ИД подразделения.</param>
        /// <returns>Дела для копирования.</returns>
        public static List <ICaseFile> GetCaseFilesToCopy(DateTime sourcePeriodStartDate, DateTime sourcePeriodEndDate,
                                                          int businessUnitId, int departmentId)
        {
            var caseFiles = CaseFiles.GetAll()
                            .Where(x => x.Status == Docflow.CaseFile.Status.Active &&
                                   x.LongTerm != true &&
                                   x.StartDate.Value >= sourcePeriodStartDate &&
                                   x.EndDate.HasValue &&
                                   x.EndDate.Value <= sourcePeriodEndDate);

            if (businessUnitId > 0)
            {
                caseFiles = caseFiles.Where(x => x.BusinessUnit != null &&
                                            x.BusinessUnit.Id == businessUnitId);
            }

            if (departmentId > 0)
            {
                var department = Sungero.Company.Departments.Get(departmentId);
                var subordinateDepartmentIds = Company.PublicFunctions.Department.Remote.GetSubordinateDepartmentIds(department);
                caseFiles = caseFiles.Where(x => x.Department != null &&
                                            (Equals(x.Department, department) ||
                                             subordinateDepartmentIds.Contains(x.Department.Id)));
            }

            return(caseFiles.ToList());
        }