Ejemplo n.º 1
0
        private void UploadChanges()
        {
            try
            {
                LoadingForm.Show(this, async p =>
                {
                    p.LoadingText = "Uploading changes...";

                    await UploadChanges(p);
                });
            }
            catch (Exception ex)
            {
                var apiException = ex as ApiException;
                if (apiException?.Errors != null && apiException.Errors.Count > 0)
                {
                    Errors = apiException.Errors;
                }
                else
                {
                    MessageBox.Show(
                        this,
                        "One or more requests failed" + Environment.NewLine + Environment.NewLine + ex.Message,
                        Text,
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error
                        );
                }
            }
        }
Ejemplo n.º 2
0
        public ValidationErrorsForm(ApiRowErrorsCollection errors)
        {
            if (errors == null)
            {
                throw new ArgumentNullException(nameof(errors));
            }

            InitializeComponent();

            VisualStyleUtil.StyleListView(_listView);

            foreach (var rowErrors in errors)
            {
                foreach (var error in rowErrors.Errors)
                {
                    _listView.Items.Add(new ListViewItem
                    {
                        Text     = (rowErrors.Row + 1).ToString(),
                        SubItems =
                        {
                            error.Field,
                            error.Error
                        }
                    });
                }
            }

            _listView.AutoResizeColumns(
                errors.Count > 0 ? ColumnHeaderAutoResizeStyle.ColumnContent : ColumnHeaderAutoResizeStyle.HeaderSize
                );
        }
Ejemplo n.º 3
0
        public void Export(Stream stream, IList <ResultSet> resultSets, ApiRowErrorsCollection errors)
        {
            if (resultSets == null)
            {
                throw new ArgumentNullException(nameof(resultSets));
            }

            var recordSet = new RecordSet();

            foreach (var resultSet in resultSets)
            {
                recordSet.AddResultSet(resultSet);
            }

            Export(stream, resultSets[0].Entity, recordSet, errors);
        }
Ejemplo n.º 4
0
        public void Export(Stream stream, EntitySchema entity, RecordSet recordSet, ApiRowErrorsCollection errors)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }
            if (recordSet == null)
            {
                throw new ArgumentNullException(nameof(recordSet));
            }

            var workbook = new XSSFWorkbook();

            var sheet = workbook.CreateSheet(PrettifyName(entity.Name));

            sheet.DefaultRowHeightInPoints = 15;

            var errorColor = new XSSFColor(Color.Orange);
            var errorStyle = (XSSFCellStyle)workbook.CreateCellStyle();

            errorStyle.FillForegroundColorColor = errorColor;
            errorStyle.FillPattern = FillPattern.SolidForeground;
            var headerStyle        = CreateHeaderStyle(workbook);
            var dateStyle          = CreateDateStyle(workbook, null, false);
            var dateErrorStyle     = CreateDateStyle(workbook, errorColor, false);
            var dateTimeStyle      = CreateDateStyle(workbook, null, true);
            var dateTimeErrorStyle = CreateDateStyle(workbook, errorColor, true);

            // Create the headers.

            var row = sheet.CreateRow(0);

            var fieldNames = recordSet[0].FieldNames.OrderBy(p => p.ToLower()).ToList();

            for (int i = 0; i < fieldNames.Count; i++)
            {
                var member = entity.Members[fieldNames[i]];
                AddHeader(row, i, HumanText.GetMemberName(member), member.Comments, headerStyle);
            }

            bool haveAutosized = false;
            Dictionary <int, ApiRowErrors> errorMap = null;

            if (errors != null)
            {
                errorMap = errors.ToDictionary(p => p.Row, p => p);
            }

            for (int i = 0; i < recordSet.Count; i++)
            {
                var record = recordSet[i];
                row = sheet.CreateRow(i + 1);
                ApiRowErrors rowErrors = null;
                if (errorMap != null)
                {
                    errorMap.TryGetValue(i, out rowErrors);
                }

                for (int j = 0; j < fieldNames.Count; j++)
                {
                    ICellStyle cellStyle = null;
                    if (rowErrors != null)
                    {
                        cellStyle = errorStyle;
                    }
                    var field = fieldNames[j];

                    switch (((EntityTypedField)entity.Members[field]).DataType)
                    {
                    case EntityDataType.Date:
                        cellStyle = rowErrors == null ? dateStyle : dateErrorStyle;
                        break;

                    case EntityDataType.DateTime:
                    case EntityDataType.DateTimeTz:
                        cellStyle = rowErrors == null ? dateTimeStyle : dateTimeErrorStyle;
                        break;
                    }

                    string fieldError = GetFieldError(rowErrors, field);

                    object value = record.ContainsField(field) ? record[field] : null;
                    AddCell(row, j, value, cellStyle, fieldError);
                }

                // We only auto size the top 20 rows for performance reasons.

                if (i == 20)
                {
                    haveAutosized = true;
                    AutoSizeColumns(fieldNames.Count, sheet);
                }
            }

            if (!haveAutosized)
            {
                AutoSizeColumns(fieldNames.Count, sheet);
            }

            workbook.Write(stream);
        }
Ejemplo n.º 5
0
        private void _editInExcel_Click(object sender, EventArgs e)
        {
            GetAllResults();

            using (var form = new EditInExcelInstructionsForm())
            {
                if (form.ShowDialog(this) != DialogResult.OK)
                {
                    return;
                }
            }

            ApiRowErrorsCollection errors = null;

            var original = new RecordSet();
            var editing  = original;

            foreach (var resultSet in _resultSets)
            {
                original.AddResultSet(resultSet);
            }

            while (true)
            {
                string fileName;

                for (int i = 0; ; i++)
                {
                    fileName = "Wastedge Export";
                    if (i > 0)
                    {
                        fileName += $" ({i})";
                    }
                    fileName += ".xlsx";

                    fileName = Path.Combine(Path.GetTempPath(), fileName);

                    if (!File.Exists(fileName))
                    {
                        break;
                    }
                }

                try
                {
                    using (var stream = File.Create(fileName))
                    {
                        new ExcelExporter().Export(stream, _entity, editing, errors);
                    }

                    try
                    {
                        Process.Start(fileName);
                    }
                    catch
                    {
                        // Ignore exceptions.
                    }

                    using (var form = new EditInExcelWaitForm())
                    {
                        if (form.ShowDialog(this) != DialogResult.OK)
                        {
                            return;
                        }
                    }

                    RecordSetChanges changes;
                    RecordSet        modified;

                    while (true)
                    {
                        try
                        {
                            using (var stream = File.OpenRead(fileName))
                            {
                                modified = new ExcelImporter().Import(stream, _entity);
                            }

                            changes = RecordSetChanges.Create(original, modified);
                            break;
                        }
                        catch (IOException)
                        {
                            var result = TaskDialogEx.Show(
                                this,
                                "The Excel file cannot be opened. Please close the Excel file before uploading your changes",
                                Text,
                                TaskDialogCommonButtons.OK | TaskDialogCommonButtons.Cancel,
                                TaskDialogIcon.Error
                                );
                            if (result == DialogResult.Cancel)
                            {
                                return;
                            }
                        }
                    }

                    using (var form = new EditInExcelUploadForm(_api, _entity, changes))
                    {
                        form.ShowDialog(this);

                        errors = form.Errors;
                    }

                    if (errors != null)
                    {
                        using (var form = new ValidationErrorsForm(errors))
                        {
                            if (form.ShowDialog(this) != DialogResult.OK)
                            {
                                return;
                            }

                            editing = modified;
                        }
                    }
                    else
                    {
                        ReloadResults();

                        return;
                    }
                }
                finally
                {
                    try
                    {
                        File.Delete(fileName);
                    }
                    catch
                    {
                        // Ignore.
                    }
                }
            }
        }