diff --git a/AsbCloudWebApi/Controllers/WellOperationController.cs b/AsbCloudWebApi/Controllers/WellOperationController.cs index 45db3f0e..cab7e32c 100644 --- a/AsbCloudWebApi/Controllers/WellOperationController.cs +++ b/AsbCloudWebApi/Controllers/WellOperationController.cs @@ -16,6 +16,7 @@ using AsbCloudApp.Data.WellOperationImport; using AsbCloudApp.Services.WellOperationImport; using AsbCloudApp.Data.WellOperationImport.Options; using AsbCloudApp.Exceptions; +using AsbCloudDb.Model; namespace AsbCloudWebApi.Controllers { @@ -344,46 +345,88 @@ namespace AsbCloudWebApi.Controllers return Ok(result); } - /// - /// Импорт операций из excel (xlsx) файла. Стандартный заполненный шаблон + /// Импорт фактических операций из excel (xlsx) файла. Стандартный заполненный шаблон /// /// id скважины - /// Параметры для парсинга файла /// Коллекция из одного файла xlsx + /// Удалить операции перед сохранением /// /// - [HttpPost("import/default")] + [HttpPost("import/fact/default/{deleteBeforeInsert:bool}")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status204NoContent)] [Permission] - public Task ImportDefaultExcelFileAsync(int idWell, - [FromQuery] WellOperationImportDefaultOptionsDto options, + public Task ImportFactDefaultExcelFileAsync(int idWell, [FromForm] IFormFileCollection files, - CancellationToken cancellationToken) => ImportExcelFileAsync(idWell, files, options, - (stream, _) => wellOperationDefaultExcelParser.Parse(stream, options), - cancellationToken); + bool deleteBeforeInsert, + CancellationToken cancellationToken) + { + var options = new WellOperationImportDefaultOptionsDto + { + IdType = WellOperation.IdOperationTypeFact + }; + + return ImportExcelFileAsync(idWell, files, options, + (stream, _) => wellOperationDefaultExcelParser.Parse(stream, options), + deleteBeforeInsert, + cancellationToken); + } + + /// + /// Импорт плановых операций из excel (xlsx) файла. Стандартный заполненный шаблон + /// + /// id скважины + /// Коллекция из одного файла xlsx + /// + /// + [HttpPost("import/plan/default")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status204NoContent)] + [Permission] + public Task ImportPlanDefaultExcelFileAsync(int idWell, + [FromForm] IFormFileCollection files, + CancellationToken cancellationToken) + { + var options = new WellOperationImportDefaultOptionsDto + { + IdType = WellOperation.IdOperationTypePlan + }; + + return ImportExcelFileAsync(idWell, files, options, + (stream, _) => wellOperationDefaultExcelParser.Parse(stream, options), + null, + cancellationToken); + } /// /// Импорт операций из excel (xlsx) файла. ГПНХ (Хантос) /// /// id скважины - /// Параметры для парсинга файла /// Коллекция из одного файла xlsx /// /// - [HttpPost("import/gazpromKhantos")] + [HttpPost("import/plan/gazpromKhantos")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status204NoContent)] [Permission] - public Task ImportGazpromKhantosExcelFileAsync(int idWell, - [FromQuery] WellOperationImportGazpromKhantosOptionsDto options, + public Task ImportPlanGazpromKhantosExcelFileAsync(int idWell, [FromForm] IFormFileCollection files, - CancellationToken cancellationToken) => ImportExcelFileAsync(idWell, files, options, - (stream, _) => wellOperationGazpromKhantosExcelParser.Parse(stream, options), - cancellationToken); + CancellationToken cancellationToken) + { + var options = new WellOperationImportGazpromKhantosOptionsDto + { + IdType = WellOperation.IdOperationTypePlan + }; + + return ImportExcelFileAsync(idWell, files, options, + (stream, _) => wellOperationGazpromKhantosExcelParser.Parse(stream, options), + null, + cancellationToken); + } /// /// Создает excel файл с операциями по скважине @@ -451,9 +494,11 @@ namespace AsbCloudWebApi.Controllers return File(stream, "application/octet-stream", fileName); } + //TODO: deleteBeforeInsert тоже быстрый костыль private async Task ImportExcelFileAsync(int idWell, [FromForm] IFormFileCollection files, TOptions options, Func parseMethod, + bool? deleteBeforeInsert, CancellationToken cancellationToken) where TOptions : IWellOperationImportOptions { @@ -495,6 +540,15 @@ namespace AsbCloudWebApi.Controllers if (!wellOperations.Any()) return NoContent(); + + //TODO: очень быстрый костыль + if (deleteBeforeInsert is not null && options.IdType == WellOperation.IdOperationTypeFact) + { + return await InsertRangeAsync(idWell, options.IdType, + deleteBeforeInsert.Value, + wellOperations, + cancellationToken); + } return Ok(wellOperations); }