示例#1
0
        /// <summary>
        /// Изменить объект.
        /// </summary>
        /// <param name="entity">Объект.</param>
        public void Update(Core.BusinessTrip.Domain.BusinessTrip entity)
        {
            BusinessTripContext businessTripContext = new BusinessTripContext();

            businessTripContext.Entry <Core.BusinessTrip.Domain.BusinessTrip>(entity).State = EntityState.Modified;
            businessTripContext.SaveChanges();
        }
        /// <summary>
        /// Изменить объект.
        /// </summary>
        /// <param name="entity">Объект.</param>
        public void Update(Core.BusinessTrip.Domain.BusinessTrip entity)
        {
            using (BusinessTripContext businessTripContext = new BusinessTripContext(ConnectionString))
            {
                businessTripContext.Configuration.AutoDetectChangesEnabled = false;
                businessTripContext.Configuration.ValidateOnSaveEnabled    = false;

                var com = entity.Command;
                com.BusinessTripId = entity.BusinessTripId;
                businessTripContext.Entry <Command>(com).State = EntityState.Modified;
                entity.Command = null;

                var requestTransport = entity.RequestTransport;
                requestTransport.BusinessTripId = entity.BusinessTripId;
                businessTripContext.Entry <RequestTransport>(requestTransport).State = EntityState.Modified;
                entity.RequestTransport = null;

                businessTripContext.Entry <Core.BusinessTrip.Domain.BusinessTrip>(entity).State = EntityState.Modified;
                businessTripContext.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s));
                businessTripContext.SaveChanges();

                businessTripContext.Configuration.AutoDetectChangesEnabled = true;
                businessTripContext.Configuration.ValidateOnSaveEnabled    = true;
            }
        }
示例#3
0
        /// <summary>
        /// Сохранить объект.
        /// </summary>
        /// <param name="entity">Объект.</param>
        public void Save(Core.BusinessTrip.Domain.BusinessTrip entity)
        {
            BusinessTripContext businessTripContext = new BusinessTripContext();

            businessTripContext.Entry(entity).State = EntityState.Added;
            businessTripContext.SaveChanges();
        }
示例#4
0
        public static bool GetDataTemplete(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            Object templatePathObj = System.IO.Path.GetFullPath(string.Format(@"\\fs21402\Templates\WindowsPrograms\IT-Distr\028_BusinessTrip\Content\Excel\{0}\{1}", "TemplateTask", businessTrip.TypeWork != null ? businessTrip.TypeWork.TemplateTask : "Служебное задание.xltx"));//"путь к файлу шаблона";

            try
            {
                if (File.Exists(templatePathObj.ToString()))
                {
                    _application = new Excel.Application();
                    _workBook    = _application.Workbooks.Add(templatePathObj);
                    _workSheet   = (Excel.Worksheet)_workBook.Worksheets.get_Item(1);

                    Visible = false;

                    return(true);
                }
                else
                {
                    _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, "Отсутствует шаблон служебного задания."));
                    MessageBox.Show("Отсутствует шаблон служебного задания.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return(false);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Ошибка при экспорте служебного задания.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);

                return(false);
            }
        }
示例#5
0
        /// <summary>
        /// Сохранение командировки.
        /// </summary>
        /// <param name="businessTrip">Командировка.</param>
        public int?SaveBusinessTrip(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            try
            {
                var time = DateTime.Now.TimeOfDay;

                var businessTripSave = Repository.SaveBusinessTrip(businessTrip);

                var timeNew            = DateTime.Now.TimeOfDay;
                var implementationTime = timeNew - time;

                _logger.Info(string.Format("{0} | Добавление записи ({1} с.).", DirectoryName, implementationTime.TotalSeconds));

                return(businessTripSave.BusinessTripId);
            }
            catch (OutOfMemoryException)
            {
                MessageBox.Show("Недостаточный объем памяти.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }
            catch (DbUpdateException ex)
            {
                _logger.Warn(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Сохранение невозможно. Отсутствуют права доступа.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(null);
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Ошибка при сохранении командировки.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }
        }
示例#6
0
        /// <summary>
        /// Обновление командировки.
        /// </summary>
        /// <param name="businessTrip">Командировка.</param>
        public void Update(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            try
            {
                var time = DateTime.Now.TimeOfDay;

                Repository.Update(businessTrip);

                var timeNew            = DateTime.Now.TimeOfDay;
                var implementationTime = timeNew - time;

                _logger.Info(string.Format("{0} | Обновление записи: {1} ({2} с.).", DirectoryName, businessTrip.BusinessTripId, implementationTime.TotalSeconds));
            }
            catch (OutOfMemoryException)
            {
                MessageBox.Show("Недостаточный объем памяти.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (DbUpdateException ex)
            {
                _logger.Warn(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Обновление невозможно. Командировка удалена другим пользователем или отсутствуют права доступа.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Ошибка при обновлении командировки.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#7
0
        /// <summary>
        /// Сохранение командировки.
        /// </summary>
        /// <param name="businessTrip">Командировка.</param>
        /// <returns>Ид новой командировки.</returns>
        public int SaveBusinessTrip(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            using (var businessTripContex = new BusinessTripContext())
            {
                businessTripContex.BusinessTrips.Add(businessTrip);
                businessTripContex.SaveChanges();

                return(businessTrip.BusinessTripId);
            }
        }
        /// <summary>
        /// Сохранение командировки.
        /// </summary>
        /// <param name="businessTrip">Командировка.</param>
        public Core.BusinessTrip.Domain.BusinessTrip SaveBusinessTrip(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            using (var businessTripContext = new BusinessTripContext(ConnectionString))
            {
                businessTripContext.BusinessTrips.Add(businessTrip);
                businessTripContext.Database.Log = (s => System.Diagnostics.Debug.WriteLine(s));
                businessTripContext.SaveChanges();

                return(businessTrip);
            }
        }
        /// <summary>
        /// Сохранить объект.
        /// </summary>
        /// <param name="entity">Объект.</param>
        public Core.BusinessTrip.Domain.BusinessTrip Save(Core.BusinessTrip.Domain.BusinessTrip entity)
        {
            BusinessTripContext businessTripContext = new BusinessTripContext(ConnectionString);

            businessTripContext.Configuration.AutoDetectChangesEnabled = false;
            businessTripContext.Configuration.ValidateOnSaveEnabled    = false;

            businessTripContext.Entry(entity).State = EntityState.Added;
            businessTripContext.Database.Log        = (s => System.Diagnostics.Debug.WriteLine(s));
            businessTripContext.SaveChanges();

            businessTripContext.Configuration.AutoDetectChangesEnabled = true;
            businessTripContext.Configuration.ValidateOnSaveEnabled    = true;

            return(entity);
        }
示例#10
0
 public Command(BusinessTrip businessTripOf, Person responsibleForEquipment, Person responsibleForData, Person responsibleForCommunication,
                Person responsibleForTechnicalSecurity, Person responsibleForFireSecurity, Person responsibleForIndustrialSecurity, Person responsibleForRigInspection,
                /*DateTime? dateBegin, DateTime? dateEnd,*/ Person responsibleForDealer, DateTime?dateDelivery, Person responsibleForReceiving,
                Person responsibleForMonitoring, Person responsibleForInformation)
 {
     BusinessTripOf                   = businessTripOf;
     ResponsibleForEquipment          = responsibleForEquipment;
     ResponsibleForData               = responsibleForData;
     ResponsibleForCommunication      = responsibleForCommunication;
     ResponsibleForTechnicalSecurity  = responsibleForTechnicalSecurity;
     ResponsibleForFireSecurity       = responsibleForFireSecurity;
     ResponsibleForIndustrialSecurity = responsibleForIndustrialSecurity;
     ResponsibleForRigInspection      = responsibleForRigInspection;
     //DateBegin = dateBegin;
     //DateEnd = dateEnd;
     ResponsibleForDealer      = responsibleForDealer;
     DateDelivery              = dateDelivery;
     ResponsibleForReceiving   = responsibleForReceiving;
     ResponsibleForMonitoring  = responsibleForMonitoring;
     ResponsibleForInformation = responsibleForInformation;
 }
示例#11
0
 private void Update_Handler(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
 {
     _model.Update(businessTrip);
 }
示例#12
0
 private void Save_Handler(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
 {
     _view.SaveIndex = _model.Save(businessTrip);
 }
示例#13
0
        public static void ExportToExcel(Core.BusinessTrip.Domain.BusinessTrip businessTrip, Dictionary <string, string> targets)
        {
            if (!GetDataTemplete(businessTrip)) //test vs
            {
                return;
            }

            try
            {
                SetCellValue(businessTrip.HeadStructuralDivision != null ? Regex.Replace(string.Format("{0} {1} {2}",
                                                                                                       HelperReports.TransformationBeginStr(businessTrip.HeadStructuralDivision.Position.Nominative, false),
                                                                                                       !HelperReports.IsPositionHead(businessTrip.HeadStructuralDivision.Position.Nominative) && businessTrip.HeadStructuralDivision.Department != null ?
                                                                                                       HelperReports.GetCategoryGenitiveByDepartmentCategory(businessTrip.HeadStructuralDivision.Department.Category) : "",
                                                                                                       businessTrip.HeadStructuralDivision.Department != null ?
                                                                                                       HelperReports.TransformationBeginStr(businessTrip.HeadStructuralDivision.Department.Nominative) : ""), "[ ]+", " ").TrimEnd(' ') : "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionPositionOne");
                SetCellValue(businessTrip.HeadStructuralDivision != null ? Regex.Replace(string.Format("{0} {1} {2}",
                                                                                                       HelperReports.TransformationBeginStr(businessTrip.HeadStructuralDivision.Position.Nominative, false),
                                                                                                       !HelperReports.IsPositionHead(businessTrip.HeadStructuralDivision.Position.Nominative) && businessTrip.HeadStructuralDivision.Department != null ?
                                                                                                       HelperReports.GetCategoryGenitiveByDepartmentCategory(businessTrip.HeadStructuralDivision.Department.Category) : "",
                                                                                                       businessTrip.HeadStructuralDivision.Department != null ?
                                                                                                       HelperReports.TransformationBeginStr(businessTrip.HeadStructuralDivision.Department.Nominative) : ""), "[ ]+", " ").TrimEnd(' ') : "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionPositionTwo");

                SetCellValue(businessTrip.HeadStructuralDivision != null ? HelperReports.GetNameShort(businessTrip.HeadStructuralDivision.Name) :
                             "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionNameOne");
                SetCellValue(businessTrip.HeadStructuralDivision != null ? HelperReports.GetNameShort(businessTrip.HeadStructuralDivision.Name) :
                             "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionNameTwo");

                if (businessTrip.HeadStructuralDivision == null)
                {
                    SetCellYellowColor("HeadStructuralDivisionNameOne");
                    SetCellYellowColor("HeadStructuralDivisionNameTwo");
                    SetCellYellowColor("HeadStructuralDivisionPositionOne");
                    SetCellYellowColor("HeadStructuralDivisionPositionTwo");
                }

                //SetCellValue(businessTrip.HeadOrganization != null ? HelperReports.TransformationBeginStr(businessTrip.HeadOrganization.Position.Nominative, false) :
                //    "<не задан руководитель организации>", "HeadOrganizationPosition");
                SetCellValue(businessTrip.HeadOrganization != null ? Regex.Replace(string.Format("{0} {1}",
                                                                                                 HelperReports.TransformationBeginStr(businessTrip.HeadOrganization.Position.Nominative, false),
                                                                                                 HelperReports.IsPositionHead(businessTrip.HeadOrganization.Position.Nominative) && businessTrip.HeadOrganization.Department != null ?
                                                                                                 HelperReports.TransformationBeginStr(businessTrip.HeadOrganization.Department.Nominative) : ""), "[ ]+", " ").TrimEnd(' ')
                    : "<не задан руководитель организации>", "HeadOrganizationPosition");
                SetCellValue(businessTrip.HeadOrganization != null ? HelperReports.GetNameShort(businessTrip.HeadOrganization.Name) :
                             "<не задан руководитель организации>", "HeadOrganizationName");

                if (businessTrip.HeadOrganization == null)
                {
                    SetCellYellowColor("HeadOrganizationPosition");
                    SetCellYellowColor("HeadOrganizationName");
                }

                SetCellValue(businessTrip.NumberDocument, "NumberDocument");
                SetCellValue(businessTrip.DateFormulationToString, "DateFormulation");

                SetCellValue(string.Format("Выполнение {0} на об.:", businessTrip.TypeWork != null ? HelperReports.TransformationBeginStr(businessTrip.TypeWork.Name) :
                                           "<не задан вид работ>"), "TypeWork");

                if (businessTrip.TypeWork == null)
                {
                    SetCellYellowColor("TypeWork");
                }

                PartyPersonComparer partyPersonComparer = new PartyPersonComparer();
                var persons = businessTrip.Party != null ? (businessTrip.Party.PartyPersons != null ? businessTrip.Party.PartyPersons.ToList() : new List <PartyPerson>()) : new List <PartyPerson>();
                persons.Sort(partyPersonComparer);

                DirectionComparer directionComparer = new DirectionComparer();
                var directions = businessTrip.Directions != null ? businessTrip.Directions : new List <Direction>();
                directions.Sort(directionComparer);

                //if (persons.Count > 0)
                //{
                var responsiblePerson = persons.FirstOrDefault(p => p.IsResponsible);
                SetCellValue(responsiblePerson != null ? HelperReports.TransformationBeginStr(responsiblePerson.Position, false) :
                             "<не задан ответственный за командировку>", "PersonPosition");
                SetCellValue(responsiblePerson != null ? HelperReports.GetNameShort(responsiblePerson.Name) :
                             "<не задан ответственный за командировку>", "PersonName");

                SetCellValue(responsiblePerson != null ? (responsiblePerson.Person.Department != null ? Regex.Replace(string.Format("{0} {1} {2}",
                                                                                                                                    HelperReports.TransformationBeginStr(responsiblePerson.Person.Department.Category, false),
                                                                                                                                    HelperReports.TransformationBeginStr(responsiblePerson.Person.Department.Nominative),
                                                                                                                                    !string.IsNullOrWhiteSpace(responsiblePerson.Person.Department.Number) ?
                                                                                                                                    string.Format("({0} № {1})", HelperReports.TransformationBeginStr(responsiblePerson.Person.Department.Category),
                                                                                                                                                  responsiblePerson.Person.Department.Number) : ""), "[ ]+", " ").TrimEnd(' ') : "<не задан отдел для ответственного за командировку>") :
                             "<не задан ответственный за командировку>", "Department");

                if (responsiblePerson == null)
                {
                    SetCellYellowColor("PersonPosition");
                    SetCellYellowColor("PersonName");
                    SetCellYellowColor("Department");
                }
                else
                {
                    if (responsiblePerson.Person.Department == null)
                    {
                        SetCellYellowColor("Department");
                    }
                }
                //}



                var saveRowCount = 0;

                if (persons.Count > 0)
                {
                    var countRowInsert = directions.Count != 0 ? persons.Count * directions.Count - 1 : persons.Count - 1;

                    while (countRowInsert != 0)
                    {
                        InsertRow(16);
                        MergeCell(16, 2, 16, 8);
                        SetBorders(16, 2, 16, 8);
                        MergeCell(16, 26, 16, 49);
                        SetBorders(16, 26, 16, 49);
                        MergeCell(16, 50, 16, 63);
                        SetBorders(16, 50, 16, 63);
                        MergeCell(16, 88, 16, 106);
                        SetBorders(16, 88, 16, 106);
                        MergeCell(16, 107, 16, 124);
                        SetBorders(16, 107, 16, 124);
                        MergeCell(16, 126, 16, 136);
                        SetBorders(16, 126, 16, 136);
                        MergeCell(16, 137, 16, 144);
                        SetBorders(16, 137, 16, 144);
                        MergeCell(16, 149, 16, 162);
                        SetBorders(16, 149, 16, 162);

                        countRowInsert--;
                    }


                    var rowCount = directions.Count != 0 ? persons.Count * directions.Count : persons.Count;
                    saveRowCount = rowCount;

                    var numPerson = 0;

                    if (directions.Count > 0)
                    {
                        for (int i = 0; i < rowCount; i = i + directions.Count)
                        {
                            if (numPerson < persons.Count)
                            {
                                SetCellValue((numPerson + 1).ToString(), i + 15, 2);
                                SetCellValue(persons[numPerson].PersonnelNumber, i + 15, 25);
                                SetCellValue(HelperReports.GetNameShort(persons[numPerson].Name), i + 15, 26);
                                SetCellValue(HelperReports.TransformationBeginStr(persons[numPerson].Position, false), i + 15, 50);

                                numPerson++;
                            }

                            if (directions.Count > 0)
                            {
                                MergeCell(i + 15, 2, i + 15 + directions.Count - 1, 2);
                                SetBorders(i + 15, 2, i + 15 + directions.Count - 1, 2);
                                MergeCell(i + 15, 25, i + 15 + directions.Count - 1, 25);
                                SetBorders(i + 15, 25, i + 15 + directions.Count - 1, 25);
                                MergeCell(i + 15, 26, i + 15 + directions.Count - 1, 26);
                                SetBorders(i + 15, 26, i + 15 + directions.Count - 1, 26);
                                MergeCell(i + 15, 50, i + 15 + directions.Count - 1, 50);
                                SetBorders(i + 15, 50, i + 15 + directions.Count - 1, 50);

                                var numDirections = 0;

                                for (int j = i; j < directions.Count + i; j++)
                                {
                                    if (numDirections < directions.Count)
                                    {
                                        SetCellValue(directions[numDirections].Location != null ? directions[numDirections].Location.ShortAddress : "", i + numDirections + 15, 88);
                                        SetCellValue(directions[numDirections].Organization != null ? directions[numDirections].Organization.ShortName : "", i + numDirections + 15, 107);
                                        SetCellValue(directions[numDirections].DateBeginAsString, i + numDirections + 15, 126);
                                        SetCellValue(directions[numDirections].DateEndAsString, i + numDirections + 15, 137);
                                        if (directions[numDirections].DateBegin != null && directions[numDirections].DateEnd != null)
                                        {
                                            var countEqualDirections = directions.Count(d => d.DateBeginAsString == directions[numDirections].DateBeginAsString && d.DateEndAsString == directions[numDirections].DateEndAsString);
                                            if (countEqualDirections > 1)
                                            {
                                                SetCellValue(Math.Round((double)1 / countEqualDirections, 2).ToString(), i + numDirections + 15, 148);
                                            }
                                            else
                                            {
                                                SetCellValue(Math.Round((directions[numDirections].DateEnd.Value - directions[numDirections].DateBegin.Value).TotalDays + 1).ToString(), i + numDirections + 15, 148);
                                            }
                                        }
                                        SetCellValue(string.Format("Об. {0}", directions[numDirections].Reason), i + numDirections + 15, 149);

                                        numDirections++;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < persons.Count; i = i + 1)
                        {
                            if (numPerson < persons.Count)
                            {
                                SetCellValue((numPerson + 1).ToString(), i + 15, 2);
                                SetCellValue(persons[i].PersonnelNumber, i + 15, 25);
                                SetCellValue(HelperReports.GetNameShort(persons[i].Name), i + 15, 26);
                                SetCellValue(HelperReports.TransformationBeginStr(persons[i].Position, false), i + 15, 50);

                                numPerson++;
                            }
                        }
                    }
                }

                if (targets != null)
                {
                    if (targets.Count != 0)
                    {
                        if (targets.Count > 3)
                        {
                            var rowCount = targets.Count;

                            while (rowCount != 0)
                            {
                                InsertRow(saveRowCount - 1 + 19);
                                MergeCell(saveRowCount - 1 + 19, 2, saveRowCount - 1 + 19, 124);
                                SetBorders(saveRowCount - 1 + 19, 2, saveRowCount - 1 + 19, 124);
                                MergeCell(saveRowCount - 1 + 19, 126, saveRowCount - 1 + 19, 162);
                                SetBorders(saveRowCount - 1 + 19, 126, saveRowCount - 1 + 19, 162);

                                rowCount--;
                            }
                        }

                        for (int i = 0; i < directions.Count; i++)
                        {
                            if (targets.Keys.Any(d => d == directions[i].Reason))
                            {
                                SetCellValue(targets[directions[i].Reason], i + saveRowCount - 1 + 18, 2);
                            }


                            //_workSheet.Range[_workSheet.Cells[i + saveRowCount - 1 + 18, 2], _workSheet.Cells[i + saveRowCount - 1 + 18, 124]].NamedRange.AutoFit();

                            //_workSheet.Cells[i + saveRowCount - 1 + 18, 2].NamedRange.AutoFit();

                            //_workSheet.Cells[i + saveRowCount - 1 + 18, 2].EntireRow.AutoFit();

                            //double CellHeight = _workSheet.Cells[i + saveRowCount - 1 + 18, 2].RowHeight;//узнать высоту
                            ////objSheet.get_Range(SecondCell, SecondCell).Value2 = ""; //очистить ячейку

                            //_workSheet.Cells[i + saveRowCount - 1 + 18, 2].RowHeight = CellHeight;
                            ////SetAutoFit(i + saveRowCount - 1 + 18, 2, i + saveRowCount - 1 + 18, 124);
                        }
                    }
                }
                Visible = true;
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Ошибка при экспорте служебного задания.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);

                Close();
            }
        }
        public static void ExportToExcel(Core.BusinessTrip.Domain.BusinessTrip businessTrip)
        {
            if (!GetDataTemplete(businessTrip))
            {
                return;
            }

            try
            {
                SetCellValue(businessTrip.HeadStructuralDivision != null ? Regex.Replace(string.Format("от {0} {1} {2}",
                                                                                                       HelperReports.TransformationBeginStr(businessTrip.HeadStructuralDivision.Position.Genitive),
                                                                                                       !HelperReports.IsPositionHead(businessTrip.HeadStructuralDivision.Position.Nominative) && businessTrip.HeadStructuralDivision.Department != null ?
                                                                                                       HelperReports.GetCategoryGenitiveByDepartmentCategory(businessTrip.HeadStructuralDivision.Department.Category) : "",
                                                                                                       string.Format("№ {0}", !string.IsNullOrWhiteSpace(businessTrip.HeadStructuralDivision.Department.Number) ?
                                                                                                                     businessTrip.HeadStructuralDivision.Department.Number : "<не задан номер отдела>")), "[ ]+", " ").TrimEnd(' ') :
                             "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionPosition");
                SetCellValue(businessTrip.HeadStructuralDivision != null ? HelperReports.GetNameGenitiveByName(businessTrip.HeadStructuralDivision.Name) :
                             "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionNameOne");
                SetCellValue(businessTrip.HeadStructuralDivision != null ? HelperReports.GetNameShort(businessTrip.HeadStructuralDivision.Name) :
                             "<не задан руководитель структурного подразделения>", "HeadStructuralDivisionName");

                if (businessTrip.HeadStructuralDivision == null)
                {
                    SetCellYellowColor("HeadStructuralDivisionPosition");
                    SetCellYellowColor("HeadStructuralDivisionNameOne");
                    SetCellYellowColor("HeadStructuralDivisionName");
                }
                else
                {
                    if (businessTrip.HeadStructuralDivision.Department != null)
                    {
                        if (string.IsNullOrWhiteSpace(businessTrip.HeadStructuralDivision.Department.Number))
                        {
                            SetCellYellowColor("HeadStructuralDivisionPosition");
                        }
                    }
                }

                SetCellValue(businessTrip.RequestTransport.DateFormulation != null ? businessTrip.RequestTransport.DateFormulation.Value.ToShortDateString() :
                             "<не задана дата формирования заявки на транспорт>", "DateFormulation");

                if (businessTrip.RequestTransport.Date == null)
                {
                    SetCellYellowColor("DateFormulation");
                }

                SetCellValue(businessTrip.HeadOrganization != null ? Regex.Replace(string.Format("{0} {1}",
                                                                                                 HelperReports.TransformationBeginStr(businessTrip.HeadOrganization.Position.Nominative, false),
                                                                                                 HelperReports.IsPositionHead(businessTrip.HeadOrganization.Position.Nominative) && businessTrip.HeadOrganization.Department != null ?
                                                                                                 HelperReports.TransformationBeginStr(businessTrip.HeadOrganization.Department.Nominative) : ""), "[ ]+", " ").TrimEnd(' ') :
                             "<не задан руководитель организации>", "HeadOrganizationPosition");
                SetCellValue(businessTrip.HeadOrganization != null ? HelperReports.GetNameShort(businessTrip.HeadOrganization.Name) :
                             "<не задан руководитель организации>", "HeadOrganizationName");

                if (businessTrip.HeadOrganization == null)
                {
                    SetCellYellowColor("HeadOrganizationPosition");
                    SetCellYellowColor("HeadOrganizationName");
                }

                SetCellValue(businessTrip.RequestTransport.ProjectManager != null ? HelperReports.TransformationBeginStr(businessTrip.RequestTransport.ProjectManager.Position.Nominative, false) :
                             "<не задан сотрудник отдела управления проектами>", "ProjectManagerPosition");

                SetCellValue(businessTrip.RequestTransport.ProjectManager != null ? HelperReports.GetNameShort(businessTrip.RequestTransport.ProjectManager.Name) :
                             "<не задан сотрудник отдела управления проектами>", "ProjectManagerName");

                if (businessTrip.RequestTransport.ProjectManager == null)
                {
                    SetCellYellowColor("ProjectManagerPosition");
                    SetCellYellowColor("ProjectManagerName");
                }

                SetCellValue(businessTrip.RequestTransport.Date != null ? businessTrip.RequestTransport.Date.Value.ToShortDateString() : "<не задана дата выдачи транспорта>", "Date");

                if (businessTrip.RequestTransport.Date == null)
                {
                    SetCellYellowColor("Date");
                }

                SetCellValue(businessTrip.RequestTransport.TimeHour != null ? businessTrip.RequestTransport.TimeHour.ToString() : "<не задано время>", "TimeHour");

                if (businessTrip.RequestTransport.TimeHour == null)
                {
                    SetCellYellowColor("TimeHour");
                }

                SetCellValue(businessTrip.RequestTransport.Address != null ? businessTrip.RequestTransport.Address.ShortAddress : "<не задан адрес>", "Address");

                if (businessTrip.RequestTransport.Address == null)
                {
                    SetCellYellowColor("Address");
                }

                PartyPersonComparer partyPersonComparer = new PartyPersonComparer();
                var persons = businessTrip.Party != null ? (businessTrip.Party.PartyPersons != null ? businessTrip.Party.PartyPersons.ToList() : new List <PartyPerson>()) : new List <PartyPerson>();
                persons.Sort(partyPersonComparer);

                DirectionComparer directionComparer = new DirectionComparer();
                var directions = businessTrip.Directions != null ? businessTrip.Directions : new List <Direction>();
                directions.Sort(directionComparer);

                var responsiblePerson = persons.FirstOrDefault(p => p.IsResponsible);
                SetCellValue(responsiblePerson != null ? HelperReports.GetNameShort(responsiblePerson.Name) :
                             "<не задан ответственный за командировку>", "ContactName");
                SetCellValue(responsiblePerson != null ? (!string.IsNullOrWhiteSpace(responsiblePerson.Person.PhoneNumber) ? responsiblePerson.Person.PhoneNumber : "<не задан телефон ответственного за командировку>") :
                             "<не задан ответственный за командировку>", "ContactPhone");

                if (responsiblePerson == null)
                {
                    SetCellYellowColor("ContactName");
                    SetCellYellowColor("ContactPhone");
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(responsiblePerson.Person.PhoneNumber))
                    {
                        SetCellYellowColor("ContactPhone");
                    }
                }

                if (directions.Count > 0)
                {
                    var countRowInsert = directions.Count != 0 ? directions.Count - 1 : 0;

                    while (countRowInsert != 0)
                    {
                        InsertRow(19);
                        countRowInsert--;
                    }

                    MergeCell(18, 1, 18 + directions.Count - 1, 1);
                    MergeCell(18, 6, 18 + directions.Count - 1, 6);
                    MergeCell(18, 7, 18 + directions.Count - 1, 7);
                    MergeCell(18, 8, 18 + directions.Count - 1, 8);
                    MergeCell(18, 9, 18 + directions.Count - 1, 9);
                    MergeCell(18, 10, 18 + directions.Count - 1, 10);

                    SetBorders(18, 1, 18 + directions.Count - 1, 11);

                    SetCellValue(businessTrip.RequestTransport.Transport != null ? HelperReports.TransformationBeginStr(businessTrip.RequestTransport.Transport.Mark, false) : "", 18, 1);
                    SetCellValue(string.Format("Обеспечение {0} работ", businessTrip.TypeWork != null ? HelperReports.TransformationBeginStr(businessTrip.TypeWork.Name) : ""), 18, 6);
                    SetCellValue(businessTrip.RequestTransport.Mileage != null ? businessTrip.RequestTransport.Mileage.Value.ToString() : "", 18, 7);
                    SetCellValue(businessTrip.RequestTransport.TimeWork != null ? businessTrip.RequestTransport.TimeWork.Value.ToString() : "", 18, 8);
                    SetCellValue(persons.Count.ToString(), 18, 9);
                    SetCellValue(persons.Count != 0 ? HelperReports.GetNameShort(persons.FirstOrDefault().Name) : "", 18, 10);

                    for (int i = 0; i < directions.Count; i++)
                    {
                        SetCellValue(directions[i].DateBeginAsString, i + 18, 2);
                        SetCellValue(directions[i].DateEndAsString, i + 18, 3);
                        SetCellValue(directions[i].Location != null ? directions[i].Location.ShortAddress : "", i + 18, 4);
                        SetCellValue(directions[i].Organization != null ? directions[i].Organization.ShortName : "", i + 18, 5);
                        SetCellValue(string.Format("Об. {0}", directions[i].Reason), i + 18, 11);
                    }
                }
                Visible = true;
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("{0} | {1} | {2}", DirectoryName, ex.Message, ex.InnerException != null ? (ex.InnerException.InnerException != null ? ex.InnerException.InnerException.Message : "") : ""));
                MessageBox.Show("Ошибка при экспорте служебного задания.", DirectoryName, MessageBoxButtons.OK, MessageBoxIcon.Error);

                Close();
            }
        }