отчеты

This commit is contained in:
a.puchkina 2024-05-28 01:58:09 +04:00
parent ba60478002
commit 6b7bddc831
16 changed files with 918 additions and 40 deletions

View File

@ -21,18 +21,21 @@ namespace LawFirmBusinessLogic.BusinessLogics
private readonly AbstractSaveToWordClientsHearing _saveToWordClientsHearing; private readonly AbstractSaveToWordClientsHearing _saveToWordClientsHearing;
private readonly AbstractSaveToPdfClients _saveToPdfClients; private readonly AbstractSaveToPdfClients _saveToPdfClients;
//private readonly AbstractSaveToExcelVisitsLawyer _saveToExcelVisitLawyer; private readonly AbstractSaveToExcelVisitsLawyer _saveToExcelVisitLawyer;
//private readonly AbstractSaveToWordVisitsLawyer _saveToWordVisitLawyer; private readonly AbstractSaveToWordVisitsLawyer _saveToWordVisitLawyer;
//private readonly AbstractSaveToPdfConsultationHearing _saveToPdfConsultationHearing; private readonly AbstractSaveToPdfConsultationHearing _saveToPdfConsultationHearing;
public ReportLogic(IClientStorage clientStorage, IHearingStorage hearingStorage, public ReportLogic(IClientStorage clientStorage, IHearingStorage hearingStorage,
IVisitStorage visitStorage, ICaseStorage caseStorage, IVisitStorage visitStorage, ICaseStorage caseStorage,
ILawyerStorage lawyerStorage, IConsultationStorage consultationStorage, ILawyerStorage lawyerStorage, IConsultationStorage consultationStorage,
AbstractSaveToExcelClientsHearing saveToExcelClientsHearing, AbstractSaveToWordClientsHearing saveToWordClientsHearing,
AbstractSaveToPdfClients saveToPdfClients AbstractSaveToExcelClientsHearing saveToExcelClientsHearing,
//,AbstractSaveToExcelVisitsLawyer saveToExcelVisitLawyer, AbstractSaveToWordClientsHearing saveToWordClientsHearing,
//AbstractSaveToWordVisitsLawyer saveToWordVisitLawyer, AbstractSaveToPdfClients saveToPdfClients,
//AbstractSaveToPdfConsultationHearing saveToPdfConsultationHearing
AbstractSaveToExcelVisitsLawyer saveToExcelVisitLawyer,
AbstractSaveToWordVisitsLawyer saveToWordVisitLawyer,
AbstractSaveToPdfConsultationHearing saveToPdfConsultationHearing
) )
{ {
_clientStorage = clientStorage; _clientStorage = clientStorage;
@ -44,9 +47,9 @@ namespace LawFirmBusinessLogic.BusinessLogics
_saveToExcelClientsHearing = saveToExcelClientsHearing; _saveToExcelClientsHearing = saveToExcelClientsHearing;
_saveToWordClientsHearing = saveToWordClientsHearing; _saveToWordClientsHearing = saveToWordClientsHearing;
_saveToPdfClients = saveToPdfClients; _saveToPdfClients = saveToPdfClients;
//_saveToExcelVisitLawyer = saveToExcelVisitLawyer; _saveToExcelVisitLawyer = saveToExcelVisitLawyer;
//_saveToWordVisitLawyer = saveToWordVisitLawyer; _saveToWordVisitLawyer = saveToWordVisitLawyer;
//_saveToPdfConsultationHearing = saveToPdfConsultationHearing; _saveToPdfConsultationHearing = saveToPdfConsultationHearing;
} }
public List<ReportClientsHearingViewModel> GetClientsHearing(ReportBindingModel model) public List<ReportClientsHearingViewModel> GetClientsHearing(ReportBindingModel model)
{ {
@ -127,7 +130,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
return list; return list;
} }
/*public List<ReportVisitLawyerViewModel> GetVisitLawyer(ReportBindingModel model) public List<ReportVisitLawyerViewModel> GetVisitLawyer(ReportBindingModel model)
{ {
var list = new List<ReportVisitLawyerViewModel>(); var list = new List<ReportVisitLawyerViewModel>();
var lawyers = _lawyerStorage.GetFilteredList(new LawyerSearchModel var lawyers = _lawyerStorage.GetFilteredList(new LawyerSearchModel
@ -135,7 +138,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
Id = model.LawyerId Id = model.LawyerId
}); });
//getfilteredlist //getfilteredlist
var consultations = _consultationStorage.GetFullList(); var hearings = _hearingStorage.GetFullList();
var visits = _visitStorage.GetFullList(); var visits = _visitStorage.GetFullList();
foreach (var lawyer in lawyers) foreach (var lawyer in lawyers)
{ {
@ -145,16 +148,16 @@ namespace LawFirmBusinessLogic.BusinessLogics
Visits = new List<DateTime>() Visits = new List<DateTime>()
}; };
foreach (var consultation in consultations) foreach (var hearing in hearings)
{ {
if (consultation.ConsultationLawyers.ContainsKey(lawyer.Id)) if (hearing.HearingLawyers.ContainsKey(lawyer.Id))
{ {
foreach (var visit in visits) foreach (var visit in visits)
{ {
if (visit.ConsultationId.Equals(consultation.Id)) if (visit.HearingId.Equals(hearing.Id))
{ {
record.Visits.Add(visit.VisitDate); record.Visits.Add(visit.VisitDate);
//record.VisitDate= visit.VisitDate; //record.VisitDate = visit.VisitDate;
} }
} }
} }
@ -162,16 +165,16 @@ namespace LawFirmBusinessLogic.BusinessLogics
list.Add(record); list.Add(record);
} }
return list; return list;
}*/ }
/*public List<ReportConsultationHearingViewModel> GetConsultationHearing(ReportBindingModel model) public List<ReportConsultationHearingViewModel> GetConsultationHearing(ReportBindingModel model)
{ {
var list = new List<ReportConsultationHearingViewModel>(); var list = new List<ReportConsultationHearingViewModel>();
var lawyers = _lawyerStorage.GetFilteredList(new LawyerSearchModel { CompanyId = model.CompanyId }); var lawyers = _lawyerStorage.GetFilteredList(new LawyerSearchModel { GuarantorId = model.GuarantorId });
var consultations = _consultationStorage.GetFilteredList(new ConsultationSearchModel { CompanyId = model.CompanyId }); var consultations = _consultationStorage.GetFilteredList(new ConsultationSearchModel { GuarantorId = model.GuarantorId });
var hearings = _hearingStorage.GetFilteredList(new HearingSearchModel var hearings = _hearingStorage.GetFilteredList(new HearingSearchModel
{ {
CompanyId = model.CompanyId, GuarantorId = model.GuarantorId,
DateFrom = model.DateFrom, DateFrom = model.DateFrom,
DateTo = model.DateTo DateTo = model.DateTo
}); });
@ -181,7 +184,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
{ {
LawyerName = lawyer.FIO, LawyerName = lawyer.FIO,
Consultation = new List<(int Id, double Price)>(), Consultation = new List<(int Id, double Price)>(),
Hearing = new List<(DateTime HearingDate, string Court)>() Hearing = new List<(DateTime HearingDate, string Judge)>()
}; };
@ -196,14 +199,13 @@ namespace LawFirmBusinessLogic.BusinessLogics
{ {
if (hearing.HearingLawyers.ContainsKey(lawyer.Id)) if (hearing.HearingLawyers.ContainsKey(lawyer.Id))
{ {
record.Hearing.Add(new(hearing.HearingDate, hearing.Court)); record.Hearing.Add(new(hearing.HearingDate, hearing.Judge));
} }
} }
list.Add(record); list.Add(record);
} }
return list; return list;
}
}*/
public void SaveClientsHearingToExcelFile(ReportBindingModel model) public void SaveClientsHearingToExcelFile(ReportBindingModel model)
{ {
@ -237,7 +239,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
}); });
} }
/*public void SaveVisitLawyerToWordFile(ReportBindingModel model) public void SaveVisitLawyerToWordFile(ReportBindingModel model)
{ {
_saveToWordVisitLawyer.CreateDoc(new WordVisitLawyerInfo _saveToWordVisitLawyer.CreateDoc(new WordVisitLawyerInfo
{ {
@ -245,9 +247,9 @@ namespace LawFirmBusinessLogic.BusinessLogics
Title = "Визиты по юристам", Title = "Визиты по юристам",
VisitLawyer = GetVisitLawyer(model) VisitLawyer = GetVisitLawyer(model)
}); });
}*/ }
/*public void SaveVisitLawyerToExcelFile(ReportBindingModel model) public void SaveVisitLawyerToExcelFile(ReportBindingModel model)
{ {
_saveToExcelVisitLawyer.CreateReport(new ExcelVisitsLawyerInfo _saveToExcelVisitLawyer.CreateReport(new ExcelVisitsLawyerInfo
{ {
@ -255,9 +257,9 @@ namespace LawFirmBusinessLogic.BusinessLogics
Title = "Визиты по юристам", Title = "Визиты по юристам",
VisitLawyer = GetVisitLawyer(model) VisitLawyer = GetVisitLawyer(model)
}); });
}*/ }
/*public void SaveConsultationHearingToPdfFile(ReportBindingModel model) public void SaveConsultationHearingToPdfFile(ReportBindingModel model)
{ {
_saveToPdfConsultationHearing.CreateDoc(new PDFConsultationHearingInfo _saveToPdfConsultationHearing.CreateDoc(new PDFConsultationHearingInfo
{ {
@ -268,7 +270,6 @@ namespace LawFirmBusinessLogic.BusinessLogics
ConsultationHearing = GetConsultationHearing(model) ConsultationHearing = GetConsultationHearing(model)
}); });
}*/ }
} }
} }

View File

@ -13,12 +13,14 @@ namespace LawFirmBusinessLogic.MailWorker
protected string _popHost = string.Empty; protected string _popHost = string.Empty;
protected int _popPort; protected int _popPort;
private readonly IExecutorLogic _executorLogic; private readonly IExecutorLogic _executorLogic;
private readonly IGuarantorLogic _guarantorLogic;
private readonly ILogger _logger; private readonly ILogger _logger;
public AbstractMailWorker(ILogger<AbstractMailWorker> logger, IExecutorLogic executorLogic) public AbstractMailWorker(ILogger<AbstractMailWorker> logger, IExecutorLogic executorLogic, IGuarantorLogic guarantorLogic)
{ {
_logger = logger; _logger = logger;
_executorLogic = executorLogic; _executorLogic = executorLogic;
_guarantorLogic = guarantorLogic;
} }
public void MailConfig(MailConfigBindingModel config) public void MailConfig(MailConfigBindingModel config)

View File

@ -10,7 +10,7 @@ namespace LawFirmBusinessLogic.MailWorker
{ {
public class MailKitWorker : AbstractMailWorker public class MailKitWorker : AbstractMailWorker
{ {
public MailKitWorker(ILogger<MailKitWorker> logger, IExecutorLogic executorLogic) : base(logger, executorLogic) { } public MailKitWorker(ILogger<MailKitWorker> logger, IExecutorLogic executorLogic, IGuarantorLogic guarantorLogic) : base(logger, executorLogic, guarantorLogic) { }
protected override async Task SendMailAsync(MailSendInfoBindingModel info) protected override async Task SendMailAsync(MailSendInfoBindingModel info)
{ {

View File

@ -0,0 +1,75 @@
using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
namespace LawFirmBusinessLogic.OfficePackages
{
public abstract class AbstractSaveToExcelVisitsLawyer
{
/// <summary>
/// Создание отчета
/// </summary>
/// <param name="info"></param>
public void CreateReport(ExcelVisitsLawyerInfo info)
{
CreateExcel(info);
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = 1,
Text = info.Title,
StyleInfo = ExcelStyleInfoType.Title
});
MergeCells(new ExcelMergeParameters
{
CellFromName = "A1",
CellToName = "C1"
});
uint rowIndex = 2;
foreach (var vl in info.VisitLawyer)
{
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = rowIndex,
Text = vl.LawyerName,
StyleInfo = ExcelStyleInfoType.Text
});
rowIndex++;
foreach (var hearing in vl.Visits)
{
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "B",
RowIndex = rowIndex,
Text = hearing.ToString(),
StyleInfo =
ExcelStyleInfoType.TextWithBroder
});
}
}
SaveExcel(info);
}
/// <summary>
/// Создание excel-файла
/// </summary>
/// <param name="info"></param>
protected abstract void CreateExcel(ExcelVisitsLawyerInfo info);
/// <summary>
/// Добавляем новую ячейку в лист
/// </summary>
/// <param name="cellParameters"></param>
protected abstract void InsertCellInWorksheet(ExcelCellParameters
excelParams);
/// <summary>
/// Объединение ячеек
/// </summary>
/// <param name="mergeParameters"></param>
protected abstract void MergeCells(ExcelMergeParameters excelParams);
/// <summary>
/// Сохранение файла
/// </summary>
/// <param name="info"></param>
protected abstract void SaveExcel(ExcelVisitsLawyerInfo info);
}
}

View File

@ -0,0 +1,115 @@
using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
namespace LawFirmBusinessLogic.OfficePackages
{
public abstract class AbstractSaveToPdfConsultationHearing
{
public void CreateDoc(PDFConsultationHearingInfo info)
{
CreatePdf(info);
CreateParagraph(new PdfParagraph
{
Text = info.Title,
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
CreateParagraph(new PdfParagraph
{
Text = $"с{info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}",
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
CreateTable(new List<string> { "3cm", "5cm", "5cm" });
CreateRow(new PdfRowParameters
{
Texts = new List<string> { "Юрист", "Номер консультации", "Цена консультации" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var ch in info.ConsultationHearing)
{
CreateRow(new PdfRowParameters
{
Texts = new List<string> { ch.LawyerName, " ", " " },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var cons in ch.Consultation)
CreateRow(new PdfRowParameters
{
Texts = new List<string> { " ", cons.Id.ToString(), cons.Price.ToString() },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
CreateRow(new PdfRowParameters
{
Texts = new List<string> { " ", " ", "Итого: " + ch.Consultation.Count.ToString() },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Rigth
});
}
CreateTable(new List<string> { "3cm", "5cm", "5cm" });
CreateRow(new PdfRowParameters
{
Texts = new List<string> { "Юрист", "Суд", "Дата слушания" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var ch in info.ConsultationHearing)
{
CreateRow(new PdfRowParameters
{
Texts = new List<string> { ch.LawyerName, " ", " " },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
foreach (var hear in ch.Hearing)
CreateRow(new PdfRowParameters
{
Texts = new List<string> { " ", hear.Judge, hear.HearingDate.ToShortDateString() },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Left
});
CreateRow(new PdfRowParameters
{
Texts = new List<string> { " ", " ", "Итого: " + ch.Hearing.Count.ToString() },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Rigth
});
}
SavePdf(info);
}
/// <summary>
/// Создание doc-файла
/// </summary>
/// <param name="info"></param>
protected abstract void CreatePdf(PDFConsultationHearingInfo info);
/// <summary>
/// Создание параграфа с текстом
/// </summary>
/// <param name="title"></param>
/// <param name="style"></param>
protected abstract void CreateParagraph(PdfParagraph paragraph);
/// <summary>
/// Создание таблицы
/// </summary>
/// <param name="title"></param>
/// <param name="style"></param>
protected abstract void CreateTable(List<string> columns);
/// <summary>
/// Создание и заполнение строки
/// </summary>
/// <param name="rowParameters"></param>
protected abstract void CreateRow(PdfRowParameters rowParameters);
/// <summary>
/// Сохранение файла
/// </summary>
/// <param name="info"></param>
protected abstract void SavePdf(PDFConsultationHearingInfo info);
}
}

View File

@ -0,0 +1,54 @@
using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
namespace LawFirmBusinessLogic.OfficePackages
{
public abstract class AbstractSaveToWordVisitsLawyer
{
public void CreateDoc(WordVisitLawyerInfo info)
{
CreateWord(info);
CreateParagraph(new WordParagraph
{
Texts = new List<(string, WordTextProperties)> {
(info.Title, new WordTextProperties { Bold = true, Size = "24", })
},
TextProperties = new WordTextProperties
{
Size = "24",
JustificationType = WordJustificationType.Center
}
});
foreach (var visitLawyer in info.VisitLawyer)
{
CreateParagraph(new WordParagraph
{
Texts = new List<(string, WordTextProperties)> {
(visitLawyer.LawyerName, new WordTextProperties { Size = "24", Bold=true}), (" " + visitLawyer.Visits.ToString(), new WordTextProperties { Size = "24"})},
TextProperties = new WordTextProperties
{
Size = "24",
JustificationType = WordJustificationType.Both
}
});
}
SaveWord(info);
}
/// <summary>
/// Создание doc-файла
/// </summary>
/// <param name="info"></param>
protected abstract void CreateWord(WordVisitLawyerInfo info);
/// <summary>
/// Создание абзаца с текстом
/// </summary>
/// <param name="paragraph"></param>
/// <returns></returns>
protected abstract void CreateParagraph(WordParagraph paragraph);
/// <summary>
/// Сохранение файла
/// </summary>
/// <param name="info"></param>
protected abstract void SaveWord(WordVisitLawyerInfo info);
}
}

View File

@ -0,0 +1,15 @@
using LawFirmContracts.ViewModels;
namespace LawFirmBusinessLogic.OfficePackages.HelperModels
{
public class ExcelVisitsLawyerInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public List<ReportVisitLawyerViewModel> VisitLawyer
{
get;
set;
} = new();
}
}

View File

@ -0,0 +1,13 @@
using LawFirmContracts.ViewModels;
namespace LawFirmBusinessLogic.OfficePackages.HelperModels
{
public class PDFConsultationHearingInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public List<ReportConsultationHearingViewModel> ConsultationHearing { get; set; } = new();
}
}

View File

@ -0,0 +1,11 @@
using LawFirmContracts.ViewModels;
namespace LawFirmBusinessLogic.OfficePackages.HelperModels
{
public class WordVisitLawyerInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public List<ReportVisitLawyerViewModel> VisitLawyer { get; set; } = new();
}
}

View File

@ -0,0 +1,347 @@
using DocumentFormat.OpenXml.Office2010.Excel;
using DocumentFormat.OpenXml.Office2013.Excel;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;
using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
namespace LawFirmBusinessLogic.OfficePackages.Implements
{
public class SaveToExcelVisitsLawyer : AbstractSaveToExcelVisitsLawyer
{
private SpreadsheetDocument? _spreadsheetDocument;
private SharedStringTablePart? _shareStringPart;
private Worksheet? _worksheet;
/// <summary>
/// Настройка стилей для файла
/// </summary>
/// <param name="workbookpart"></param>
private static void CreateStyles(WorkbookPart workbookpart)
{
var sp = workbookpart.AddNewPart<WorkbookStylesPart>();
sp.Stylesheet = new Stylesheet();
var fonts = new Fonts() { Count = 2U, KnownFonts = true };
var fontUsual = new Font();
fontUsual.Append(new FontSize() { Val = 12D });
fontUsual.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Theme = 1U });
fontUsual.Append(new FontName() { Val = "Times New Roman" });
fontUsual.Append(new FontFamilyNumbering() { Val = 2 });
fontUsual.Append(new FontScheme() { Val = FontSchemeValues.Minor });
var fontTitle = new Font();
fontTitle.Append(new Bold());
fontTitle.Append(new FontSize() { Val = 14D });
fontTitle.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Theme = 1U });
fontTitle.Append(new FontName() { Val = "Times New Roman" });
fontTitle.Append(new FontFamilyNumbering() { Val = 2 });
fontTitle.Append(new FontScheme() { Val = FontSchemeValues.Minor });
fonts.Append(fontUsual);
fonts.Append(fontTitle);
var fills = new Fills() { Count = 2U };
var fill1 = new Fill();
fill1.Append(new PatternFill() { PatternType = PatternValues.None });
var fill2 = new Fill();
fill2.Append(new PatternFill()
{
PatternType = PatternValues.Gray125
});
fills.Append(fill1);
fills.Append(fill2);
var borders = new Borders() { Count = 2U };
var borderNoBorder = new Border();
borderNoBorder.Append(new LeftBorder());
borderNoBorder.Append(new RightBorder());
borderNoBorder.Append(new TopBorder());
borderNoBorder.Append(new BottomBorder());
borderNoBorder.Append(new DiagonalBorder());
var borderThin = new Border();
var leftBorder = new LeftBorder() { Style = BorderStyleValues.Thin };
leftBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Indexed = 64U });
var rightBorder = new RightBorder()
{
Style = BorderStyleValues.Thin
};
rightBorder.Append(new
DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Indexed = 64U });
var topBorder = new TopBorder() { Style = BorderStyleValues.Thin };
topBorder.Append(new DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Indexed = 64U });
var bottomBorder = new BottomBorder()
{
Style =
BorderStyleValues.Thin
};
bottomBorder.Append(new
DocumentFormat.OpenXml.Office2010.Excel.Color()
{ Indexed = 64U });
borderThin.Append(leftBorder);
borderThin.Append(rightBorder);
borderThin.Append(topBorder);
borderThin.Append(bottomBorder);
borderThin.Append(new DiagonalBorder());
borders.Append(borderNoBorder);
borders.Append(borderThin);
var cellStyleFormats = new CellStyleFormats() { Count = 1U };
var cellFormatStyle = new CellFormat()
{
NumberFormatId = 0U,
FontId = 0U,
FillId = 0U,
BorderId = 0U
};
cellStyleFormats.Append(cellFormatStyle);
var cellFormats = new CellFormats() { Count = 3U };
var cellFormatFont = new CellFormat()
{
NumberFormatId = 0U,
FontId = 0U,
FillId = 0U,
BorderId = 0U,
FormatId = 0U,
ApplyFont = true
};
var cellFormatFontAndBorder = new CellFormat()
{
NumberFormatId = 0U,
FontId = 0U,
FillId = 0U,
BorderId = 1U,
FormatId = 0U,
ApplyFont = true,
ApplyBorder = true
};
var cellFormatTitle = new CellFormat()
{
NumberFormatId = 0U,
FontId = 1U,
FillId = 0U,
BorderId = 0U,
FormatId = 0U,
Alignment = new Alignment()
{
Vertical = VerticalAlignmentValues.Center,
WrapText = true,
Horizontal =
HorizontalAlignmentValues.Center
},
ApplyFont = true
};
cellFormats.Append(cellFormatFont);
cellFormats.Append(cellFormatFontAndBorder);
cellFormats.Append(cellFormatTitle);
var cellStyles = new CellStyles() { Count = 1U };
cellStyles.Append(new CellStyle()
{
Name = "Normal",
FormatId = 0U,
BuiltinId = 0U
});
var differentialFormats = new
DocumentFormat.OpenXml.Office2013.Excel.DifferentialFormats()
{ Count = 0U };
var tableStyles = new TableStyles()
{
Count = 0U,
DefaultTableStyle =
"TableStyleMedium2",
DefaultPivotStyle = "PivotStyleLight16"
};
var stylesheetExtensionList = new StylesheetExtensionList();
var stylesheetExtension1 = new StylesheetExtension()
{
Uri =
"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}"
};
stylesheetExtension1.AddNamespaceDeclaration("x14",
"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
stylesheetExtension1.Append(new SlicerStyles()
{
DefaultSlicerStyle =
"SlicerStyleLight1"
});
var stylesheetExtension2 = new StylesheetExtension()
{
Uri =
"{9260A510-F301-46a8-8635-F512D64BE5F5}"
};
stylesheetExtension2.AddNamespaceDeclaration("x15",
"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main");
stylesheetExtension2.Append(new TimelineStyles()
{
DefaultTimelineStyle = "TimeSlicerStyleLight1"
});
stylesheetExtensionList.Append(stylesheetExtension1);
stylesheetExtensionList.Append(stylesheetExtension2);
sp.Stylesheet.Append(fonts);
sp.Stylesheet.Append(fills);
sp.Stylesheet.Append(borders);
sp.Stylesheet.Append(cellStyleFormats);
sp.Stylesheet.Append(cellFormats);
sp.Stylesheet.Append(cellStyles);
sp.Stylesheet.Append(differentialFormats);
sp.Stylesheet.Append(tableStyles);
sp.Stylesheet.Append(stylesheetExtensionList);
}
/// <summary>
/// Получение номера стиля из типа
/// </summary>
/// <param name="styleInfo"></param>
/// <returns></returns>
private static uint GetStyleValue(ExcelStyleInfoType styleInfo)
{
return styleInfo switch
{
ExcelStyleInfoType.Title => 2U,
ExcelStyleInfoType.TextWithBroder => 1U,
ExcelStyleInfoType.Text => 0U,
_ => 0U,
};
}
protected override void CreateExcel(ExcelVisitsLawyerInfo info)
{
_spreadsheetDocument = SpreadsheetDocument.Create(info.FileName,
SpreadsheetDocumentType.Workbook);
// Создаем книгу (в ней хранятся листы)
var workbookpart = _spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
CreateStyles(workbookpart);
// Получаем/создаем хранилище текстов для книги
_shareStringPart =
_spreadsheetDocument.WorkbookPart!.GetPartsOfType<SharedStringTablePart>().Any()
?
_spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First()
:
_spreadsheetDocument.WorkbookPart.AddNewPart<SharedStringTablePart>();
// Создаем SharedStringTable, если его нет
if (_shareStringPart.SharedStringTable == null)
{
_shareStringPart.SharedStringTable = new SharedStringTable();
}
// Создаем лист в книгу
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Добавляем лист в книгу
var sheets =
_spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());
var sheet = new Sheet()
{
Id =
_spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Лист"
};
sheets.Append(sheet);
_worksheet = worksheetPart.Worksheet;
}
protected override void InsertCellInWorksheet(ExcelCellParameters
excelParams)
{
if (_worksheet == null || _shareStringPart == null)
{
return;
}
var sheetData = _worksheet.GetFirstChild<SheetData>();
if (sheetData == null)
{
return;
}
// Ищем строку, либо добавляем ее
Row row;
if (sheetData.Elements<Row>().Where(r => r.RowIndex! ==
excelParams.RowIndex).Any())
{
row = sheetData.Elements<Row>().Where(r => r.RowIndex! ==
excelParams.RowIndex).First();
}
else
{
row = new Row() { RowIndex = excelParams.RowIndex };
sheetData.Append(row);
}
// Ищем нужную ячейку
Cell cell;
if (row.Elements<Cell>().Where(c => c.CellReference!.Value ==
excelParams.CellReference).Any())
{
cell = row.Elements<Cell>().Where(c => c.CellReference!.Value ==
excelParams.CellReference).First();
}
else
{
// Все ячейки должны быть последовательно друг за другом расположены
// нужно определить, после какой вставлять
Cell? refCell = null;
foreach (Cell rowCell in row.Elements<Cell>())
{
if (string.Compare(rowCell.CellReference!.Value,
excelParams.CellReference, true) > 0)
{
refCell = rowCell;
break;
}
}
var newCell = new Cell()
{
CellReference =
excelParams.CellReference
};
row.InsertBefore(newCell, refCell);
cell = newCell;
}
// вставляем новый текст
_shareStringPart.SharedStringTable.AppendChild(new
SharedStringItem(new Text(excelParams.Text)));
_shareStringPart.SharedStringTable.Save();
cell.CellValue = new
CellValue((_shareStringPart.SharedStringTable.Elements<SharedStringItem>().Count(
) - 1).ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
cell.StyleIndex = GetStyleValue(excelParams.StyleInfo);
}
protected override void MergeCells(ExcelMergeParameters excelParams)
{
if (_worksheet == null)
{
return;
}
MergeCells mergeCells;
if (_worksheet.Elements<MergeCells>().Any())
{
mergeCells = _worksheet.Elements<MergeCells>().First();
}
else
{
mergeCells = new MergeCells();
if (_worksheet.Elements<CustomSheetView>().Any())
{
_worksheet.InsertAfter(mergeCells,
_worksheet.Elements<CustomSheetView>().First());
}
else
{
_worksheet.InsertAfter(mergeCells,
_worksheet.Elements<SheetData>().First());
}
}
var mergeCell = new MergeCell()
{
Reference = new StringValue(excelParams.Merge)
};
mergeCells.Append(mergeCell);
}
protected override void SaveExcel(ExcelVisitsLawyerInfo info)
{
if (_spreadsheetDocument == null)
{
return;
}
_spreadsheetDocument.WorkbookPart!.Workbook.Save();
_spreadsheetDocument.Dispose();
}
}
}

View File

@ -0,0 +1,102 @@

using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using VerticalAlignment = MigraDoc.DocumentObjectModel.Tables.VerticalAlignment;
namespace LawFirmBusinessLogic.OfficePackages.Implements
{
public class SaveToPdfConsultationHearing : AbstractSaveToPdfConsultationHearing
{
private Document? _document;
private Section? _section;
private MigraDoc.DocumentObjectModel.Tables.Table? _table;
private static ParagraphAlignment
GetParagraphAlignment(PdfParagraphAlignmentType type)
{
return type switch
{
PdfParagraphAlignmentType.Center => ParagraphAlignment.Center,
PdfParagraphAlignmentType.Left => ParagraphAlignment.Left,
PdfParagraphAlignmentType.Rigth => ParagraphAlignment.Right,
_ => ParagraphAlignment.Justify,
};
}
/// <summary>
/// Создание стилей для документа
/// </summary>
/// <param name="document"></param>
private static void DefineStyles(Document document)
{
var style = document.Styles["Normal"];
style.Font.Name = "Times New Roman";
style.Font.Size = 14;
style = document.Styles.AddStyle("NormalTitle", "Normal");
style.Font.Bold = true;
}
protected override void CreatePdf(PDFConsultationHearingInfo info)
{
_document = new Document();
DefineStyles(_document);
_section = _document.AddSection();
}
protected override void CreateParagraph(PdfParagraph pdfParagraph)
{
if (_section == null)
{
return;
}
var paragraph = _section.AddParagraph(pdfParagraph.Text);
paragraph.Format.SpaceAfter = "1cm";
paragraph.Format.Alignment =
GetParagraphAlignment(pdfParagraph.ParagraphAlignment);
paragraph.Style = pdfParagraph.Style;
}
protected override void CreateTable(List<string> columns)
{
if (_document == null)
{
return;
}
_table = _document.LastSection.AddTable();
foreach (var elem in columns)
{
_table.AddColumn(elem);
}
}
protected override void CreateRow(PdfRowParameters rowParameters)
{
if (_table == null)
{
return;
}
var row = _table.AddRow();
for (int i = 0; i < rowParameters.Texts.Count; ++i)
{
row.Cells[i].AddParagraph(rowParameters.Texts[i]);
if (!string.IsNullOrEmpty(rowParameters.Style))
{
row.Cells[i].Style = rowParameters.Style;
}
Unit borderWidth = 0.5;
row.Cells[i].Borders.Left.Width = borderWidth;
row.Cells[i].Borders.Right.Width = borderWidth;
row.Cells[i].Borders.Top.Width = borderWidth;
row.Cells[i].Borders.Bottom.Width = borderWidth;
row.Cells[i].Format.Alignment =
GetParagraphAlignment(rowParameters.ParagraphAlignment);
row.Cells[i].VerticalAlignment = VerticalAlignment.Center;
}
}
protected override void SavePdf(PDFConsultationHearingInfo info)
{
var renderer = new PdfDocumentRenderer(true)
{
Document = _document
};
renderer.RenderDocument();
renderer.PdfDocument.Save(info.FileName);
}
}
}

View File

@ -0,0 +1,125 @@
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml;
using LawFirmBusinessLogic.OfficePackages.HelperEnums;
using LawFirmBusinessLogic.OfficePackages.HelperModels;
namespace LawFirmBusinessLogic.OfficePackages.Implements
{
public class SaveToWordVisitsLawyer : AbstractSaveToWordVisitsLawyer
{
private WordprocessingDocument? _wordDocument;
private Body? _docBody;
/// <summary>
/// Получение типа выравнивания
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private static JustificationValues
GetJustificationValues(WordJustificationType type)
{
return type switch
{
WordJustificationType.Both => JustificationValues.Both,
WordJustificationType.Center => JustificationValues.Center,
_ => JustificationValues.Left,
};
}
/// <summary>
/// Настройки страницы
/// </summary>
/// <returns></returns>
private static SectionProperties CreateSectionProperties()
{
var properties = new SectionProperties();
var pageSize = new PageSize
{
Orient = PageOrientationValues.Portrait
};
properties.AppendChild(pageSize);
return properties;
}
/// <summary>
/// Задание форматирования для абзаца
/// </summary>
/// <param name="paragraphProperties"></param>
/// <returns></returns>
private static ParagraphProperties?
CreateParagraphProperties(WordTextProperties? paragraphProperties)
{
if (paragraphProperties == null)
{
return null;
}
var properties = new ParagraphProperties();
properties.AppendChild(new Justification()
{
Val =
GetJustificationValues(paragraphProperties.JustificationType)
});
properties.AppendChild(new SpacingBetweenLines
{
LineRule = LineSpacingRuleValues.Auto
});
properties.AppendChild(new Indentation());
var paragraphMarkRunProperties = new ParagraphMarkRunProperties();
if (!string.IsNullOrEmpty(paragraphProperties.Size))
{
paragraphMarkRunProperties.AppendChild(new FontSize
{
Val =
paragraphProperties.Size
});
}
properties.AppendChild(paragraphMarkRunProperties);
return properties;
}
protected override void CreateWord(WordVisitLawyerInfo info)
{
_wordDocument = WordprocessingDocument.Create(info.FileName,
WordprocessingDocumentType.Document);
MainDocumentPart mainPart = _wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
_docBody = mainPart.Document.AppendChild(new Body());
}
protected override void CreateParagraph(WordParagraph paragraph)
{
if (_docBody == null || paragraph == null)
{
return;
}
var docParagraph = new Paragraph();
docParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties));
foreach (var run in paragraph.Texts)
{
var docRun = new Run();
var properties = new RunProperties();
properties.AppendChild(new FontSize { Val = run.Item2.Size });
if (run.Item2.Bold)
{
properties.AppendChild(new Bold());
}
docRun.AppendChild(properties);
docRun.AppendChild(new Text
{
Text = run.Item1,
Space =
SpaceProcessingModeValues.Preserve
});
docParagraph.AppendChild(docRun);
}
_docBody.AppendChild(docParagraph);
}
protected override void SaveWord(WordVisitLawyerInfo info)
{
if (_docBody == null || _wordDocument == null)
{
return;
}
_docBody.AppendChild(CreateSectionProperties());
_wordDocument.MainDocumentPart!.Document.Save();
_wordDocument.Dispose();
}
}
}

View File

@ -11,5 +11,6 @@ namespace LawFirmContracts.BindingModels
public DateTime? DateFrom { get; set; } public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; } public DateTime? DateTo { get; set; }
public int? ExecutorId { get; set; } //? public int? ExecutorId { get; set; } //?
public int? GuarantorId { get; set; }
} }
} }

View File

@ -7,14 +7,14 @@ namespace LawFirmContracts.BusinessLogicContracts
{ {
List<ReportClientsHearingViewModel> GetClientsHearing(ReportBindingModel model); List<ReportClientsHearingViewModel> GetClientsHearing(ReportBindingModel model);
List<ReportClientsViewModel> GetGetClients(ReportBindingModel model); List<ReportClientsViewModel> GetGetClients(ReportBindingModel model);
//List<ReportVisitLawyerViewModel> GetVisitLawyer(ReportBindingModel model); List<ReportVisitLawyerViewModel> GetVisitLawyer(ReportBindingModel model);
//List<ReportConsultationHearingViewModel> GetConsultationHearing(ReportBindingModel model); List<ReportConsultationHearingViewModel> GetConsultationHearing(ReportBindingModel model);
void SaveClientsHearingToWordFile(ReportBindingModel model); void SaveClientsHearingToWordFile(ReportBindingModel model);
void SaveClientsHearingToExcelFile(ReportBindingModel model); void SaveClientsHearingToExcelFile(ReportBindingModel model);
//void SaveVisitLawyerToWordFile(ReportBindingModel model); void SaveVisitLawyerToWordFile(ReportBindingModel model);
//void SaveVisitLawyerToExcelFile(ReportBindingModel model); void SaveVisitLawyerToExcelFile(ReportBindingModel model);
//void SaveConsultationHearingToPdfFile(ReportBindingModel model); void SaveConsultationHearingToPdfFile(ReportBindingModel model);
void SaveClientsToPdfFile(ReportBindingModel model); void SaveClientsToPdfFile(ReportBindingModel model);
} }
} }

View File

@ -0,0 +1,9 @@
namespace LawFirmContracts.ViewModels
{
public class ReportConsultationHearingViewModel
{
public string LawyerName { get; set; } = string.Empty;
public List<(int Id, double Price)> Consultation { get; set; } = new();
public List<(DateTime HearingDate, string Judge)> Hearing { get; set; } = new();
}
}

View File

@ -0,0 +1,8 @@
namespace LawFirmContracts.ViewModels
{
public class ReportVisitLawyerViewModel
{
public string LawyerName { get; set; } = string.Empty;
public List<DateTime> Visits { get; set; } = new();
}
}