Compare commits

...

4 Commits

5 changed files with 384 additions and 163 deletions

View File

@@ -8,86 +8,129 @@ using System.Text.RegularExpressions;
namespace CompanyManagement.Infrastructure.Excel.InstitutionContract; namespace CompanyManagement.Infrastructure.Excel.InstitutionContract;
// Enum برای تعریف ستون‌های موجود
public enum ExcelColumnType
{
RowNumber, // ردیف
PhysicalContract, // قرارداد فیزیکی
ContractNo, // شماره قرارداد
Representative, // معرف
ContractingPartyName, // طرف حساب
ArchiveCode, // شماره کارفرما
EmployerName, // کارفرما
WorkshopName, // کارگاه‌ها (چندخطی)
WorkshopCount, // تعداد کارگاه
EmployeeCount, // مجموع پرسنل
ContractStartDate, // شروع قرارداد
ContractEndDate, // پایان قرارداد
InstallmentAmount, // مبلغ قسط
ContractAmount, // مبلغ قرارداد
FinancialStatus // وضعیت مالی
}
// کلاس کانفیگ برای تنظیم ستون‌های نمایشی
public class ExcelColumnConfig
{
public List<ExcelColumnType> VisibleColumns { get; set; }
public ExcelColumnConfig()
{
// فعلاً تمام ستون‌ها فعال هستند
VisibleColumns = new List<ExcelColumnType>
{
ExcelColumnType.PhysicalContract,
ExcelColumnType.ContractNo,
ExcelColumnType.Representative,
ExcelColumnType.ContractingPartyName,
ExcelColumnType.ArchiveCode,
ExcelColumnType.EmployerName,
ExcelColumnType.WorkshopName,
ExcelColumnType.WorkshopCount,
ExcelColumnType.EmployeeCount,
ExcelColumnType.ContractStartDate,
ExcelColumnType.ContractEndDate,
ExcelColumnType.InstallmentAmount,
ExcelColumnType.ContractAmount,
ExcelColumnType.FinancialStatus
};
}
}
public class InstitutionContractExcelGenerator public class InstitutionContractExcelGenerator
{ {
private static ExcelColumnConfig _columnConfig = new ExcelColumnConfig();
public static byte[] GenerateExcel(List<InstitutionContractViewModel> institutionContractViewModels) public static byte[] GenerateExcel(List<InstitutionContractExcelViewModel> contractViewModels)
{ {
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization"); ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
using var package = new ExcelPackage(); using var package = new ExcelPackage();
var allWorksheet = package.Workbook.Worksheets.Add("همه");
var blueWorksheet = package.Workbook.Worksheets.Add("آبی");
blueWorksheet.TabColor = Color.LightBlue;
var grayWorksheet = package.Workbook.Worksheets.Add("خاکستری");
grayWorksheet.TabColor = Color.LightGray;
var redWorksheet = package.Workbook.Worksheets.Add("قرمز");
redWorksheet.TabColor = Color.LightCoral;
var purpleWorksheet = package.Workbook.Worksheets.Add("بنفش");
purpleWorksheet.TabColor = Color.MediumPurple;
var blackWorksheet = package.Workbook.Worksheets.Add("مشکی");
blackWorksheet.TabColor = Color.DimGray;
var yellowWorksheet = package.Workbook.Worksheets.Add("زرد");
yellowWorksheet.TabColor = Color.Yellow;
var whiteWorksheet = package.Workbook.Worksheets.Add("سفید");
whiteWorksheet.TabColor = Color.White;
CreateExcelSheet(institutionContractViewModels, allWorksheet);
var blueContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "blue").ToList();
CreateExcelSheet(blueContracts, blueWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(blueContracts).ToList();
var grayContracts = institutionContractViewModels.Where(x => x.IsContractingPartyBlock == "true").ToList();
CreateExcelSheet(grayContracts, grayWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(grayContracts).ToList();
var redContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "red").ToList();
CreateExcelSheet(redContracts, redWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(redContracts).ToList();
var purpleContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "purple").ToList();
CreateExcelSheet(purpleContracts, purpleWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(purpleContracts).ToList();
var blackContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "black").ToList(); // ایجاد شیت برای هر تب با داده‌های مربوطه
CreateExcelSheet(blackContracts, blackWorksheet); foreach (var viewModel in contractViewModels)
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList(); {
var worksheet = CreateWorksheet(package, viewModel.Tab);
var yellowContracts = institutionContractViewModels CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet);
.Where(x => string.IsNullOrWhiteSpace(x.ExpireColor) && x.WorkshopCount == "0").ToList(); }
CreateExcelSheet(yellowContracts, yellowWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(yellowContracts).ToList();
var otherContracts = institutionContractViewModels;
CreateExcelSheet(otherContracts, whiteWorksheet);
return package.GetAsByteArray(); return package.GetAsByteArray();
} }
private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet) /// <summary>
/// ایجاد شیت بر اساس نوع تب
/// </summary>
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
{ {
// Headers return status switch
worksheet.Cells[1, 1].Value = "شماره قرارداد"; {
worksheet.Cells[1, 2].Value = "طرف حساب"; InstitutionContractListStatus.DeactiveWithDebt =>
worksheet.Cells[1, 3].Value = "شماره کارفرما"; CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue),
worksheet.Cells[1, 4].Value = "کارفرما ها";
worksheet.Cells[1, 5].Value = "کارگاه ها"; InstitutionContractListStatus.Deactive =>
worksheet.Cells[1, 6].Value = "مجبوع پرسنل"; CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
worksheet.Cells[1, 7].Value = "شروع قرارداد";
worksheet.Cells[1, 8].Value = "پایان قرارداد"; InstitutionContractListStatus.PendingForRenewal =>
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)"; CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
worksheet.Cells[1, 11].Value = "وضعیت مالی"; InstitutionContractListStatus.Free =>
CreateColoredWorksheet(package, "بنفش", Color.MediumPurple),
InstitutionContractListStatus.Block =>
CreateColoredWorksheet(package, "بلاک", Color.DimGray),
InstitutionContractListStatus.WithoutWorkshop =>
CreateColoredWorksheet(package, "بدون کارگاه", Color.Yellow),
InstitutionContractListStatus.Active =>
CreateColoredWorksheet(package, "فعال", Color.White),
InstitutionContractListStatus.PendingForVerify =>
CreateColoredWorksheet(package, "در انتظار تایید", Color.OrangeRed),
null => CreateColoredWorksheet(package, "کل قرارداد ها", Color.White),
_ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
};
}
using (var range = worksheet.Cells[1, 1, 1, 11]) /// <summary>
/// ایجاد شیت با رنگ تب
/// </summary>
private static ExcelWorksheet CreateColoredWorksheet(ExcelPackage package, string sheetName, Color tabColor)
{
var worksheet = package.Workbook.Worksheets.Add(sheetName);
worksheet.TabColor = tabColor;
return worksheet;
}
private static void CreateExcelSheet(List<GetInstitutionContractListItemsViewModel> contractItems, ExcelWorksheet worksheet)
{
// دریافت نقشه ستون‌های مرئی
var visibleColumnIndices = GetVisibleColumnIndices();
int columnCount = visibleColumnIndices.Count;
// تنظیم Headers
SetupHeaders(worksheet, visibleColumnIndices, columnCount);
using (var range = worksheet.Cells[1, 1, 1, columnCount])
{ {
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center; range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
@@ -110,30 +153,35 @@ public class InstitutionContractExcelGenerator
int row = 2; int row = 2;
for (int i = 0; i < institutionContractViewModels.Count; i++) for (int i = 0; i < contractItems.Count; i++)
{ {
var contract = institutionContractViewModels[i]; var contract = contractItems[i];
var employers = contract.EmployerViewModels?.ToList() ?? new(); var employers = contract.EmployerNames?.ToList() ?? new();
var workshops = contract.WorkshopViewModels?.ToList() ?? new(); var workshops = contract.WorkshopNames?.ToList() ?? new();
int maxRows = Math.Max(employers.Count, workshops.Count); int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست
maxRows = Math.Max(1, maxRows);
int startRow = row; int startRow = row;
int endRow = row + maxRows - 1; int endRow = row + maxRows - 1;
// 🎨 دریافت رنگ پس‌زمینه از مقدار رنگ موجود در داده // 🎨 دریافت رنگ پس‌زمینه بر اساس وضعیت قرارداد
string colorName = contract.ExpireColor.ToLower(); var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount);
var fillColor = GetColorByName(colorName, contract.WorkshopCount, contract.IsContractingPartyBlock);
for (int j = 0; j < maxRows; j++) for (int j = 0; j < maxRows; j++)
{ {
int currentRow = row + j; int currentRow = row + j;
worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null; // پر کردن ستون‌های employer و workshop
worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null; var employerColIndex = GetColumnIndexForType(ExcelColumnType.EmployerName, visibleColumnIndices);
var workshopColIndex = GetColumnIndexForType(ExcelColumnType.WorkshopName, visibleColumnIndices);
for (int col = 1; col <= 11; col++) if (employerColIndex > 0)
worksheet.Cells[currentRow, employerColIndex].Value = j < employers.Count ? employers[j] : null;
if (workshopColIndex > 0)
worksheet.Cells[currentRow, workshopColIndex].Value = j < workshops.Count ? workshops[j] : null;
for (int col = 1; col <= columnCount; col++)
{ {
var cell = worksheet.Cells[currentRow, col]; var cell = worksheet.Cells[currentRow, col];
@@ -154,109 +202,235 @@ public class InstitutionContractExcelGenerator
} }
// 🧱 مرج و مقداردهی ستون‌های اصلی // 🧱 مرج و مقداردهی ستون‌های اصلی
worksheet.Cells[startRow, 1, endRow, 1].Merge = true; FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices);
worksheet.Cells[startRow, 1].Value = contract.ContractNo;
worksheet.Cells[startRow, 2, endRow, 2].Merge = true;
worksheet.Cells[startRow, 2].Value = contract.ContractingPartyName;
worksheet.Cells[startRow, 3, endRow, 3].Merge = true;
worksheet.Cells[startRow, 3].Value = contract.ArchiveCode;
worksheet.Cells[startRow, 6, endRow, 6].Merge = true;
worksheet.Cells[startRow, 6].Value = contract.EmployeeCount;
worksheet.Cells[startRow, 7, endRow, 7].Merge = true;
worksheet.Cells[startRow, 7].Value = contract.ContractStartFa;
worksheet.Cells[startRow, 8, endRow, 8].Merge = true;
worksheet.Cells[startRow, 8].Value = contract.ContractEndFa;
worksheet.Cells[startRow, 9, endRow, 9].Merge = true;
var contractWithoutWorkshopAmountCell = worksheet.Cells[startRow, 9];
contractWithoutWorkshopAmountCell.Value = contract.WorkshopCount == "0" ? MoneyToDouble(contract.ContractAmount) : "";
contractWithoutWorkshopAmountCell.Style.Numberformat.Format = "#,##0";
worksheet.Cells[startRow, 10, endRow, 10].Merge = true;
var contractAmountCell = worksheet.Cells[startRow, 10];
contractAmountCell.Value = contract.WorkshopCount != "0" ? MoneyToDouble(contract.ContractAmount) : "";
contractAmountCell.Style.Numberformat.Format = "#,##0";
worksheet.Cells[startRow, 11, endRow, 11].Merge = true;
var balance = MoneyToDouble(contract.BalanceStr);
var balanceCell = worksheet.Cells[startRow, 11];
balanceCell.Value = balance;
balanceCell.Style.Numberformat.Format = "#,##0";
if (balance > 0)
balanceCell.Style.Font.Color.SetColor(Color.Red);
else if (balance < 0)
balanceCell.Style.Font.Color.SetColor(Color.Green);
// 📦 بوردر ضخیم خارجی برای هر سطر // 📦 بوردر ضخیم خارجی برای هر سطر
var boldRange = worksheet.Cells[startRow, 1, endRow, 11]; var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount];
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium); boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
row += maxRows; row += maxRows;
} }
SetupPrintSettings(worksheet, visibleColumnIndices, columnCount);
}
/// <summary>
/// دریافت فهرست ستون‌های مرئی بر اساس کانفیگ
/// </summary>
private static List<ExcelColumnType> GetVisibleColumnIndices()
{
return _columnConfig.VisibleColumns;
}
/// <summary>
/// دریافت شماره ستون برای یک نوع ستون خاص
/// </summary>
private static int GetColumnIndexForType(ExcelColumnType columnType, List<ExcelColumnType> visibleColumns)
{
var index = visibleColumns.IndexOf(columnType);
return index >= 0 ? index + 1 : 0; // 1-based indexing
}
/// <summary>
/// دریافت متن header برای یک نوع ستون
/// </summary>
private static string GetColumnHeader(ExcelColumnType columnType)
{
return columnType switch
{
ExcelColumnType.RowNumber => "ردیف",
ExcelColumnType.PhysicalContract => "قرارداد فیزیکی",
ExcelColumnType.ContractNo => "شماره قرارداد",
ExcelColumnType.Representative => "معرف",
ExcelColumnType.ContractingPartyName => "طرف حساب",
ExcelColumnType.ArchiveCode => "شماره کارفرما",
ExcelColumnType.EmployerName => "کارفرما",
ExcelColumnType.WorkshopName => "کارگاه‌ها",
ExcelColumnType.WorkshopCount => "تعداد کارگاه",
ExcelColumnType.EmployeeCount => "مجموع پرسنل",
ExcelColumnType.ContractStartDate => "شروع قرارداد",
ExcelColumnType.ContractEndDate => "پایان قرارداد",
ExcelColumnType.InstallmentAmount => "مبلغ قسط",
ExcelColumnType.ContractAmount => "مبلغ قرارداد",
ExcelColumnType.FinancialStatus => "وضعیت مالی",
_ => ""
};
}
/// <summary>
/// تنظیم Headerهای ستون‌ها
/// </summary>
private static void SetupHeaders(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
{
for (int i = 0; i < visibleColumns.Count; i++)
{
worksheet.Cells[1, i + 1].Value = GetColumnHeader(visibleColumns[i]);
}
}
/// <summary>
/// پر کردن داده‌های ستون‌ها برای یک قرارداد
/// </summary>
private static void FillColumnData(ExcelWorksheet worksheet, GetInstitutionContractListItemsViewModel contract, int startRow, int endRow, List<ExcelColumnType> visibleColumns)
{
for (int i = 0; i < visibleColumns.Count; i++)
{
int columnIndex = i + 1; // 1-based indexing
var columnType = visibleColumns[i];
// Merge cells for non-repeating columns
worksheet.Cells[startRow, columnIndex, endRow, columnIndex].Merge = true;
var cell = worksheet.Cells[startRow, columnIndex];
switch (columnType)
{
case ExcelColumnType.PhysicalContract:
var physicalText = contract.IsOldContract
? (contract.HasSigniture ? "موجود" : "ناموجود")
: (contract.IsInPersonContract ? "الکترونیکی حضوری" : "الکترونیکی غیر حضوری");
cell.Value = physicalText;
cell.Style.Font.Bold = true;
cell.Style.Font.Color.SetColor(physicalText switch
{
"موجود" => Color.Green,
"ناموجود" => Color.Red,
"الکترونیکی حضوری" => Color.Purple,
_ => Color.Blue
});
break;
case ExcelColumnType.ContractNo:
cell.Value = contract.ContractNo;
break;
case ExcelColumnType.Representative:
cell.Value = contract.RepresentativeName;
break;
case ExcelColumnType.ContractingPartyName:
cell.Value = contract.ContractingPartyName;
break;
case ExcelColumnType.ArchiveCode:
cell.Value = contract.ArchiveNo;
break;
case ExcelColumnType.EmployerName:
// این ستون چندخطی است و داخل loop پر می‌شود
break;
case ExcelColumnType.WorkshopName:
// این ستون چندخطی است و داخل loop پر می‌شود
break;
case ExcelColumnType.WorkshopCount:
cell.Value = contract.WorkshopsCount;
break;
case ExcelColumnType.EmployeeCount:
cell.Value = contract.EmployeesCount;
break;
case ExcelColumnType.ContractStartDate:
cell.Value = contract.ContractStartFa;
break;
case ExcelColumnType.ContractEndDate:
cell.Value = contract.ContractEndFa;
break;
case ExcelColumnType.InstallmentAmount:
cell.Value = contract.InstallmentAmount;
cell.Style.Numberformat.Format = "#,##0";
break;
case ExcelColumnType.ContractAmount:
cell.Value = contract.ContractAmount;
cell.Style.Numberformat.Format = "#,##0";
break;
case ExcelColumnType.FinancialStatus:
cell.Value = contract.Balance;
cell.Style.Numberformat.Format = "#,##0";
if (contract.Balance > 0)
cell.Style.Font.Color.SetColor(Color.Red);
else if (contract.Balance < 0)
cell.Style.Font.Color.SetColor(Color.Green);
break;
}
}
}
/// <summary>
/// تنظیم تنظیمات چاپ و عرض ستون‌ها
/// </summary>
private static void SetupPrintSettings(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
{
worksheet.PrinterSettings.PaperSize = ePaperSize.A4; worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
worksheet.PrinterSettings.Orientation = eOrientation.Landscape; worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
worksheet.PrinterSettings.FitToPage = true; worksheet.PrinterSettings.FitToPage = true;
worksheet.PrinterSettings.FitToWidth = 1; worksheet.PrinterSettings.FitToWidth = 1;
worksheet.PrinterSettings.FitToHeight = 0; worksheet.PrinterSettings.FitToHeight = 0;
worksheet.PrinterSettings.Scale = 85; worksheet.PrinterSettings.Scale = 85;
int contractNoCol = 1;
int contractingPartyNameCol = 2; // تنظیم عرض ستون‌ها بر اساس نوع ستون
int archiveNoCol = 3; for (int i = 0; i < visibleColumns.Count; i++)
int employersCol = 4; {
int workshopsCol = 5; int columnIndex = i + 1;
int employeeCountCol = 6; worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]);
int startContractCol = 7; }
int endContractCol = 8;
int contractWithoutWorkshopAmountCol = 9;
int contractAmountCol = 10;
int balanceCol = 11;
worksheet.Columns[contractNoCol].Width = 17;
worksheet.Columns[contractingPartyNameCol].Width = 40;
worksheet.Columns[archiveNoCol].Width = 10;
worksheet.Columns[employersCol].Width = 40;
worksheet.Columns[workshopsCol].Width = 45;
worksheet.Columns[employeeCountCol].Width = 12;
worksheet.Columns[startContractCol].Width = 12;
worksheet.Columns[endContractCol].Width = 12;
worksheet.Columns[contractWithoutWorkshopAmountCol].Width = 18;
worksheet.Columns[contractAmountCol].Width = 12;
worksheet.Columns[balanceCol].Width = 12;
worksheet.View.RightToLeft = true; // فارسی worksheet.View.RightToLeft = true; // فارسی
//worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); }
/// <summary>
/// دریافت عرض ستون پیش‌فرض برای هر نوع ستون
/// </summary>
private static double GetColumnWidth(ExcelColumnType columnType)
{
return columnType switch
{
ExcelColumnType.RowNumber => 8,
ExcelColumnType.PhysicalContract => 15,
ExcelColumnType.ContractNo => 17,
ExcelColumnType.Representative => 15,
ExcelColumnType.ContractingPartyName => 40,
ExcelColumnType.ArchiveCode => 10,
ExcelColumnType.EmployerName => 40,
ExcelColumnType.WorkshopName => 45,
ExcelColumnType.WorkshopCount => 12,
ExcelColumnType.EmployeeCount => 12,
ExcelColumnType.ContractStartDate => 12,
ExcelColumnType.ContractEndDate => 12,
ExcelColumnType.InstallmentAmount => 15,
ExcelColumnType.ContractAmount => 15,
ExcelColumnType.FinancialStatus => 12,
_ => 12
};
} }
private static double MoneyToDouble(string value) private static double MoneyToDouble(string value)
{ {
Console.WriteLine(value); if (string.IsNullOrEmpty(value))
return 0;
var min = value.Length > 1 ? value.Substring(0, 2) : ""; var min = value.Length > 1 ? value.Substring(0, 2) : "";
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble(); var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
Console.WriteLine(test);
return test; return test;
} }
private static Color GetColorByName(string name, string workshopCount, string IsContractingPartyBlock)
/// <summary>
/// دریافت رنگ بر اساس وضعیت قرارداد
/// </summary>
private static Color GetColorByStatus(InstitutionContractListStatus status, int workshopsCount)
{ {
return name switch return status switch
{ {
"blue" => Color.LightBlue, InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue,
_ when IsContractingPartyBlock == "true" => Color.LightGray, InstitutionContractListStatus.Deactive => Color.LightGray,
"red" => Color.LightCoral, InstitutionContractListStatus.PendingForRenewal => Color.LightCoral,
"purple" => Color.MediumPurple, InstitutionContractListStatus.Free => Color.MediumPurple,
"black" => Color.DimGray, InstitutionContractListStatus.Block => Color.DimGray,
var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow, InstitutionContractListStatus.WithoutWorkshop => Color.Yellow,
InstitutionContractListStatus.Active => Color.White,
_ => Color.White _ => Color.White
}; };
} }
} }
public class InstitutionContractExcelViewModel
{
public InstitutionContractListStatus? Tab { get; set; }
public List<GetInstitutionContractListItemsViewModel> GetInstitutionContractListItemsViewModels { get; set; }
}

View File

@@ -341,7 +341,7 @@ public class institutionContractController : AdminBaseController
{ {
var institutionContractViewModels = var institutionContractViewModels =
_institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" }); _institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" });
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels); var bytes = InstitutionContractExcelGenerator.GenerateExcel(new List<InstitutionContractExcelViewModel>());
return File(bytes, return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx"); $"قرارداد های مالی.xlsx");
@@ -814,6 +814,34 @@ public class institutionContractController : AdminBaseController
var res= await _institutionContractApplication.VerifyInstitutionContractManually(id); var res= await _institutionContractApplication.VerifyInstitutionContractManually(id);
return res; return res;
} }
[HttpGet("excel-download")]
public async Task<IActionResult> ExcelDownload()
{
var searchModel = new InstitutionContractListSearchModel();
var dataVm=new List<InstitutionContractExcelViewModel>();
foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames())
{
var @enum = Enum.Parse<InstitutionContractListStatus>(name);
searchModel.Status = @enum;
searchModel.PageSize = 99999;
var data =( await(_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = @enum, GetInstitutionContractListItemsViewModels = data});
}
searchModel.Status = null;
var nullData = ( await(_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = null, GetInstitutionContractListItemsViewModels = nullData});
var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm);
return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx");
}
} }

View File

@@ -2,6 +2,7 @@
using System.Drawing; using System.Drawing;
using _0_Framework.Application; using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Account;
using Company.Domain.InstitutionContractAgg;
using CompanyManagement.Infrastructure.Excel.InstitutionContract; using CompanyManagement.Infrastructure.Excel.InstitutionContract;
using CompanyManagment.App.Contracts.Employer; using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContract;
@@ -38,6 +39,7 @@ public class IndexModel : PageModel
private readonly IInstitutionContractApplication _institutionContract; private readonly IInstitutionContractApplication _institutionContract;
private readonly ILeftWorkApplication _leftWorkApplication; private readonly ILeftWorkApplication _leftWorkApplication;
private readonly IRepresentativeApplication _representativeApplication; private readonly IRepresentativeApplication _representativeApplication;
private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly string _viewName; private readonly string _viewName;
@@ -60,7 +62,7 @@ public class IndexModel : PageModel
IPersonalContractingPartyApp contractingPartyApplication, IPersonalContractingPartyApp contractingPartyApplication,
IRepresentativeApplication representativeApplication, IInstitutionContractApplication institutionContract, IRepresentativeApplication representativeApplication, IInstitutionContractApplication institutionContract,
ILeftWorkApplication leftWorkApplication ILeftWorkApplication leftWorkApplication
, IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication) , IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication, IInstitutionContractRepository institutionContractRepository)
{ {
_workshopApplication = workshopApplication; _workshopApplication = workshopApplication;
@@ -71,6 +73,7 @@ public class IndexModel : PageModel
_leftWorkApplication = leftWorkApplication; _leftWorkApplication = leftWorkApplication;
_contactInfoApplication = contactInfoApplication; _contactInfoApplication = contactInfoApplication;
_accountApplication = accountApplication; _accountApplication = accountApplication;
_institutionContractRepository = institutionContractRepository;
} }
public string Message { get; set; } public string Message { get; set; }
@@ -920,12 +923,27 @@ public class IndexModel : PageModel
}); });
} }
public IActionResult OnGetDownloadExcel() public async Task<IActionResult> OnGetDownloadExcel()
{ {
var institutionContractViewModels = _institutionContract.NewSearch(new() {IsActiveString = "both", TypeOfContract = "both" }); var searchModel = new InstitutionContractListSearchModel();
institutionContractViewModels= institutionContractViewModels.GroupBy(x=>x.ContractingPartyId).Select(g=>g.MaxBy(x=>x.ContractStartGr)).ToList(); var dataVm=new List<InstitutionContractExcelViewModel>();
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels);
foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames())
{
var @enum = Enum.Parse<InstitutionContractListStatus>(name);
searchModel.Status = @enum;
searchModel.PageSize = 99999;
var data =( await(_institutionContractRepository.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = @enum, GetInstitutionContractListItemsViewModels = data});
}
searchModel.Status = null;
var nullData = ( await(_institutionContractRepository.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = null, GetInstitutionContractListItemsViewModels = nullData});
var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm);
return File(bytes, return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx"); $"قرارداد های مالی.xlsx");

View File

@@ -289,6 +289,7 @@ builder.Services.AddCors(options =>
"http://localhost:3000", "http://localhost:3000",
"http://localhost:4000", "http://localhost:4000",
"http://localhost:4001", "http://localhost:4001",
"http://localhost:4002",
"http://localhost:3001", "http://localhost:3001",
"https://gozareshgir.ir", "https://gozareshgir.ir",
"https://dad-mehr.ir", "https://dad-mehr.ir",

View File

@@ -11,7 +11,7 @@
}, },
"ServiceHost": { "ServiceHost": {
"commandName": "Project", "commandName": "Project",
"launchBrowser": true, "launchBrowser": false,
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"