private void AlignData(Document doc)
 {
     var container = (Page)View.ContentContainers.Single(t => t.Name == "pageAlignData");
     var document = (Document)View.Documents.Single(t => t.ControlName == "AlignData");
     container.Parent = View.ActiveContentContainer;
     document.Caption = string.Format("Выверка данных {0}", ActiveForm);
     View.ActivateContainer(container);
 }
 public bool CanCheck(Document doc)
 {
     return ActiveForm != null;
 }
 private bool OpenFile(Document doc)
 {
     using (var openFileDialog = new OpenFileDialog())
     {
         openFileDialog.Filter = "Microsoft Excel 2003 (*.xls)|*.xls|Microsoft Excel 2007-2013 (*.xlsx)|*.xlsx";
         var result = openFileDialog.ShowDialog(this);
         if (result == DialogResult.OK)
         {
             var filename = openFileDialog.FileName;
             try
             {
                 var fileContents = File.ReadAllBytes(filename);
                 var documentFormat = DocumentFormat.OpenXml;
                 if (filename.EndsWith(".xls"))
                     documentFormat = DocumentFormat.Xls;
                 using (var ms = new MemoryStream(fileContents, 0, fileContents.Length))
                 {
                     this.spreadsheetControl.LoadDocument(ms, documentFormat);
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
                 return false;
             }
         }
     }
     return false;
 }
        public async void Check(Document doc)
        {
            if (ActiveForm == null)
            {
                return;
            }
            if (!ActiveForm.check_file_id.HasValue)
            {
                this.ShowFlyoutMessageBox("Ошибка", 
                    string.Format("Для формы {0} не загружен файл с формулами.\nОбратитесь к администратору.", ActiveForm.name), 
                    FlyoutCommand.OK);
                return;
            }
            var checkdata = ActiveForm.check_file.contents;
            var encoding = Encoding.UTF8;
            var crc = FileUtility.GetCRC32AsHexString(checkdata);
            if (!crc.Equals(ActiveForm.check_file_md5))
            {
                this.ShowFlyoutMessageBox("Ошибка", 
                    string.Format("Ошибка целостности данных в файле проверки для формы {0}.\nОбратитесь к Администратору.", ActiveForm.name), 
                    FlyoutCommand.OK);
                return;
            }
            ProgressDialog.ShowTop(this.ParentForm, description: "Проверка формы...");

            var resultList = await FormulaUtility.GetCheckResultsAsync(checkdata, encoding, this.spreadsheetControl.Document);
            ProgressDialog.HideTop();
            if (resultList.Count > 0)
            {
                spreadsheetControl.Tag = "Unchecked";
                this.ShowFlyoutMessageBox("Информация",
                    "Форма заполнена с ошибками." +
                    (CheckExpressionParser.IsLastCheckFileHadErrors ? "\nФайл с формулами содержит ошибки, проверка выполнена частично." : string.Empty), 
                    FlyoutCommand.OK);
                var resultForm = new CheckResultSummaryForm();
                resultForm.SetData(resultList);
                resultForm.Show(this);
            }
            else
            {
                if (CheckExpressionParser.IsLastCheckFileHadErrors)
                {
                    this.ShowFlyoutMessageBox("Информация", "Файл с формулами содержит ошибки, проверка выполнена частично.\nОбратитесь к администратору.", FlyoutCommand.OK);
                }
                else
                {
                    spreadsheetControl.Tag = "Checked";
                    var isBlocked = await ActiveForm.IsBlockedAsync();
                    var actions = isBlocked ? new [] { FlyoutCommand.OK } : new [] { FlyoutCommand.Yes, FlyoutCommand.No };
                    var msg = string.Format("Форма {0} не содержит ошибок." + (isBlocked ? "" : " Загрузить на сервер?"), ActiveForm.name);
                    var continueToSave = this.ShowFlyoutMessageBox("Информация", msg, actions);
                    if (continueToSave == DialogResult.Yes)
                    {
                        var formStatus = Status.OK;
                        var now = await Repo.GetNowAsync();
                        if (now.Year == _selectedDate.Year)
                        {
                            var timeRemaining = await ActiveForm.TimeRemainingAsync();
                            if (timeRemaining == TimeSpan.Zero)
                            {
                                this.ShowFlyoutMessageBox("Информация", "Срок сдачи формы просрочен. Форма будет загружена с соответствующей пометкой.", FlyoutCommand.OK);
                                formStatus = Status.Expired;
                            }
                        }
                        ExecuteUpload(doc, ActiveForm, _selectedDate.Year, formStatus);
                    }
                }
            }
        }
 protected override bool CanSave(Document doc)
 {
     return ActiveForm != null;
 }
 protected override async void Save(Document doc)
 {
     if (ActiveForm == null)
     {
         this.ShowFlyoutMessageBox("Ошибка", "Не выбрана форма для отправки", FlyoutCommand.OK);
         return;
     }
     if (this.spreadsheetControl.Document == null)
     {
         this.ShowFlyoutMessageBox("Информация", "Нечего отправлять", FlyoutCommand.OK);
         return;
     }
     if (spreadsheetControl.IsCellEditorActive)
         spreadsheetControl.CloseCellEditor(CellEditorEnterValueMode.Default);
     var continueToSave = this.ShowFlyoutMessageBox(
             "Подтверждение",
             String.Format("Будет загружена форма {0} из {1}. Продолжить загрузку на сервер?", ActiveForm.name, 
                 Source == FormSource.File ? "файла" : 
                 Source == FormSource.Template ? "шаблона" : "ниоткуда"),
             FlyoutCommand.Yes, FlyoutCommand.No);
     if (continueToSave == DialogResult.No)
         return;
     var formStatus = Status.OK;
     if (spreadsheetControl.Tag.ToString() != "Checked")
     {
         continueToSave = this.ShowFlyoutMessageBox(
             "Информация",
             "Форма заполнена с ошибками или не была проверена.\nПеред загрузкой на сервер необходимо, чтобы заполненная форма не содержала ошибок.\nПродолжить загрузку на сервер?",
             FlyoutCommand.Yes, FlyoutCommand.No);
         if (continueToSave == DialogResult.Yes)
         {
             formStatus = Status.WithErrors;
         }
         else
         {
             return;
         }
     }
     var now = await Repo.GetNowAsync();
     if (now.Year == _selectedDate.Year)
     {
         var timeRemaining = await ActiveForm.TimeRemainingAsync();
         if (timeRemaining == TimeSpan.Zero)
         {
             this.ShowFlyoutMessageBox("Информация", "Срок сдачи формы просрочен. Форма будет загружена с соответствующей пометкой.", FlyoutCommand.OK);
             formStatus = formStatus == Status.OK 
                 ? Status.Expired 
                 : Status.WithErrors | Status.Expired;
         }
     }
     ExecuteUpload(doc, ActiveForm, _selectedDate.Year, formStatus);
 }
 private void ExecuteUpload(Document doc, form form, int year, Status status)
 {
     switch (doc.ControlName)
     {
         case "UploadSheetFromFile":
         case "UploadSheetFromTemplate":
             this.UploadNewFormData(form, year, status);
             break;
         case "FormData":
         case "FormData1":
         case "FormData2":
             this.UploadEduFormDataChanges(form, year, status);
             break;
         case "FormData3":
         case "FormData4":
             this.UploadMunitFormDataChanges(form, year, status);
             break;
         default:
             this.ShowFlyoutMessageBox("Информация", "Нечего отправлять.", FlyoutCommand.OK);
             break;
     }
 }
        public void SaveLocal(Document doc)
        {
            using (var saveFileDialog = new SaveFileDialog())
            {
                saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                saveFileDialog.FileName = string.Format("{0}-{1}-{2}.xlsx", Authentication.Credentials.Name, ActiveForm, DateTime.Now.ToString("yy-MM-dd"));
                saveFileDialog.Filter = "Excel 2007-2013 (*.xlsx)|*.xlsx";
                if (saveFileDialog.ShowDialog(this) != DialogResult.OK) 
                    return;
                try
                {
                    using (Stream fs = saveFileDialog.OpenFile())
                    {
                        this.spreadsheetControl.SaveDocument(fs, DocumentFormat.OpenXml);
                        this.ShowFlyoutMessageBox("Информация", "Файл сохранен.", FlyoutCommand.OK);
                        this.IsLocalSaved = true;
                    }
                }
                catch (Exception ex)
                {
                    this.ShowFlyoutMessageBox("Ошибка", "Не удалось сохранить файл\n" + ex.Message, FlyoutCommand.OK);                    
                }
 
            }
        }