Skip to content

Commit

Permalink
feat(formats): generate WarMaterialAndSpecialEquipmentAssignmentForma…
Browse files Browse the repository at this point in the history
…t header and main info
  • Loading branch information
CarlosPavajeau committed Aug 6, 2021
1 parent 91d9441 commit d9e421f
Show file tree
Hide file tree
Showing 7 changed files with 151 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public async Task<IActionResult> RegisterWarMaterialAndSpecialEquipmentAssignmen
var command = _mapper.Map<CreateWarMaterialAndSpecialEquipmentAssignmentFormatCommand>(request);
await _mediator.Send(command);
}
catch (DbUpdateException e)
catch (DbUpdateException)
{
return BadRequest();
}
Expand Down
4 changes: 4 additions & 0 deletions src/Armory.Api/Extensions/Infrastructure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@
using Armory.People.Infrastructure.Persistence;
using Armory.Ranks.Domain;
using Armory.Ranks.Infrastructure.Persistence;
using Armory.Shared.Domain.ClosedXML;
using Armory.Shared.Domain.Persistence.EntityFramework.Transactions;
using Armory.Shared.Helpers;
using Armory.Shared.Infrastructure.ClosedXML;
using Armory.Shared.Infrastructure.Persistence.EntityFramework;
using Armory.Shared.Infrastructure.Persistence.EntityFramework.Transactions;
using Armory.Squadrons.Domain;
Expand Down Expand Up @@ -88,6 +90,8 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi

services.AddScoped<ITransactionInitializer, TransactionInitializer>();

services.AddScoped<IWorksheetManager, WorksheetManager>();

return services;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public async Task<MemoryStream> Handle(CreateWarMaterialAndSpecialEquipmentAssig
request.Explosives);


return await _generator.Generate(format);
return _generator.Generate(format);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,95 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Armory.Formats.Shared.Domain;
using Armory.Formats.WarMaterialAndSpecialEquipmentAssignmentFormats.Domain;
using Armory.Shared.Domain.ClosedXML;
using ClosedXML.Excel;
using Microsoft.AspNetCore.Hosting;

namespace Armory.Formats.WarMaterialAndSpecialEquipmentAssignmentFormats.Application.Generate
{
public class WarMaterialAndSpecialEquipmentAssignmentFormatGenerator
{
public async Task<MemoryStream> Generate(WarMaterialAndSpecialEquipmentAssignmentFormat format)
private const string FormatName = "FORMATO ASIGNACIÓN MATERIAL DE GUERRA Y EQUIPO ESPECIAL";
private const string FormatTitle = "FUERZA AÉREA COLOMBIANA";

private readonly IHostingEnvironment _environment;
private readonly IWorksheetManager _worksheetManager;

public WarMaterialAndSpecialEquipmentAssignmentFormatGenerator(IHostingEnvironment environment,
IWorksheetManager worksheetManager)
{
_environment = environment;
_worksheetManager = worksheetManager;
}

private void MakeWorksheetHeader(IXLWorksheet worksheet, WarMaterialAndSpecialEquipmentAssignmentFormat format)
{
_worksheetManager.SetRowsHeight(worksheet.Rows(1, 3), 33);
_worksheetManager.SetColumnsWidth(worksheet.Columns("B:M"), 14);
worksheet.Column("A").Width = 4;
_worksheetManager.SetCommonRangeStyles(worksheet.Range("A1:M3"));

_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A1:B3"), "ArmoryImage");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("C1:K1"), FormatTitle);
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("C2:K3"), FormatName);

worksheet.Cell("L1").Value = "Código";
worksheet.Cell("L2").Value = "Versión";
worksheet.Cell("L3").Value = "Vigencia";

worksheet.Cell("M1").Value = format.Code;
worksheet.Cell("M2").Value = 4;
worksheet.Cell("M3").Value = format.Validity.ToString("d");
}

private void MakeWorksheetMainInfo(IXLWorksheet worksheet,
WarMaterialAndSpecialEquipmentAssignmentFormat format)
{
return null;
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("K5:M5"), "FORMATO ACTA No.");

_worksheetManager.SetRangeFontBold(worksheet.Range("K5:M5"), true);
_worksheetManager.SetRangeFontBold(worksheet.Range("A6:M17"), true);

_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A6:F6"),
$"Lugar y fecha: {format.Place}, {format.Date:d}");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A7:F7"), $"Unidad: {format.SquadronCode}");

var warehouse = format.Warehouse == Warehouse.Air ? "AÉREO" : "TERRESTRE";
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("H7:M7"),
$"ALMACÉN DE ARMAMENTO: {warehouse}");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A8:F8"), $"Solicitante: {format.TroopId}");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A9:F9"), $"Dependencia: {format.SquadCode}");

var purpose = format.Purpose switch
{
Purpose.Instruction => "INSTRUCCIÓN",
Purpose.Operations => "OPERACIONES",
Purpose.Verification => "COMPROBACIÓN",
_ => throw new ArgumentOutOfRangeException(
$"Invalid purpose value, the pass value is {format.Purpose}")
};
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A11:F11"), $"Finalidad: {purpose}");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("I11:M11"), $"OTROS: {format.Others}");

var docMovement = format.DocMovement == DocMovement.Consumption ? "CONSUMO" : "DEVOLUTIVO";
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A5:F15"), $"DOC MOVIMIENTO: {docMovement}");
_worksheetManager.MergeRangeAndSetValue(worksheet.Range("A17:D17"),
$"UBICACIÓN FÍSICA: {format.PhysicalLocation}");
}

public MemoryStream Generate(WarMaterialAndSpecialEquipmentAssignmentFormat format)
{
var workBook = new XLWorkbook();
var workSheet = workBook.AddWorksheet(format.Code);

MakeWorksheetHeader(workSheet, format);
MakeWorksheetMainInfo(workSheet, format);

var memoryStream = new MemoryStream();
workBook.SaveAs(memoryStream);

return memoryStream;
}
}
}
15 changes: 15 additions & 0 deletions src/Shared/Domain/ClosedXML/IWorksheetManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using ClosedXML.Excel;

namespace Armory.Shared.Domain.ClosedXML
{
public interface IWorksheetManager
{
void SetRowsHeight(IXLRows rows, float height);
void SetColumnsWidth(IXLColumns columns, float width);
void SetCommonRangeStyles(IXLRange range);
void MergeRange(IXLRange range);
void MergeRangeAndSetValue<T>(IXLRange range, T value);

void SetRangeFontBold(IXLRange range, bool bold);
}
}
45 changes: 45 additions & 0 deletions src/Shared/Infrastructure/ClosedXML/WorksheetManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using Armory.Shared.Domain.ClosedXML;
using ClosedXML.Excel;

namespace Armory.Shared.Infrastructure.ClosedXML
{
public class WorksheetManager : IWorksheetManager
{
public void SetRowsHeight(IXLRows rows, float height)
{
rows.Height = height;
}

public void SetColumnsWidth(IXLColumns columns, float width)
{
columns.Width = width;
}

public void SetCommonRangeStyles(IXLRange range)
{
range.Style.Border.OutsideBorder = XLBorderStyleValues.Hair;
range.Style.Border.InsideBorder = XLBorderStyleValues.Hair;
range.Style.Font.FontSize = 12;
range.Style.Font.FontName = "Arial";
SetRangeFontBold(range, true);
range.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
range.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
}

public void MergeRange(IXLRange range)
{
range.Merge();
}

public void MergeRangeAndSetValue<T>(IXLRange range, T value)
{
MergeRange(range);
range.Value = value;
}

public void SetRangeFontBold(IXLRange range, bool bold)
{
range.Style.Font.Bold = bold;
}
}
}
1 change: 1 addition & 0 deletions src/Shared/Shared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="ClosedXML" Version="0.95.4"/>
<PackageReference Include="MediatR" Version="9.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.8"/>
</ItemGroup>
Expand Down

0 comments on commit d9e421f

Please sign in to comment.