224 lines
10 KiB
C#
224 lines
10 KiB
C#
using OfficeOpenXml;
|
|
using OfficeOpenXml.Style;
|
|
|
|
namespace CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
|
|
|
|
public class EmployeeBankInfoExcelGenerator
|
|
{
|
|
public static byte[] Generate(List<EmployeeBankInfoExcelViewModel> list)
|
|
{
|
|
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
|
|
using var package = new ExcelPackage();
|
|
var worksheet = package.Workbook.Worksheets.Add("EmployeeBankInfo");
|
|
|
|
worksheet.Cells[1, 1].Value = "نام پرسنل";
|
|
|
|
// پیدا کردن بیشترین تعداد حساب بانکی در بین افراد
|
|
int maxAccounts = list.Max(p => p.BankAccounts.Count);
|
|
|
|
for (int i = 0; i < maxAccounts; i++)
|
|
{
|
|
worksheet.Cells[1, 2 + i * 3].Value = $"نام بانک";
|
|
worksheet.Cells[1, 3 + i * 3].Value = $"مشخصات حساب";
|
|
worksheet.Cells[1, 3 + i * 3, 1, 4 + i * 3].Merge = true;
|
|
}
|
|
|
|
// تنظیم رنگ خاکستری برای هدر
|
|
using (var range = worksheet.Cells[1, 1, 1, 1 + maxAccounts * 3])
|
|
{
|
|
range.Style.Font.Bold = true;
|
|
range.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
|
|
range.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
|
|
range.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
|
|
range.Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
|
|
range.Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
|
|
range.Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
|
|
range.Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thick;
|
|
}
|
|
for (int i = 0; i < maxAccounts; i++)
|
|
{
|
|
worksheet.Cells[1, 2 + i * 3].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
|
|
worksheet.Cells[1, 2 + i * 3].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
|
|
worksheet.Cells[1, 3 + i * 3].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
|
|
worksheet.Cells[1, 3 + i * 3].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
|
|
}
|
|
|
|
int row = 2;
|
|
|
|
foreach (var personnel in list)
|
|
{
|
|
int startRow = row;
|
|
int endRow = row + 2;
|
|
|
|
var personnelNameCell = worksheet.Cells[startRow, 1, endRow, 1];
|
|
personnelNameCell.Merge = true;
|
|
personnelNameCell.Value = personnel.Name;
|
|
personnelNameCell.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
|
|
personnelNameCell.Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
|
|
personnelNameCell.Style.Border.BorderAround(ExcelBorderStyle.Thick);
|
|
|
|
int bankNameCol = 2;
|
|
for (int j = 0; j < maxAccounts; j++)
|
|
{
|
|
var bankCell = worksheet.Cells[row, bankNameCol, row + 2, bankNameCol];
|
|
bankCell.Merge = true;
|
|
bankCell.Style.Border.BorderAround(ExcelBorderStyle.Thick);
|
|
bankCell.Style.Border.Right.Style = ExcelBorderStyle.Thin;
|
|
bankCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
|
bankCell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
|
|
|
|
|
|
|
worksheet.Cells[row, bankNameCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row, bankNameCol + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
|
|
|
|
|
|
worksheet.Cells[row + 1, bankNameCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row + 1, bankNameCol + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
|
|
|
|
|
|
|
|
worksheet.Cells[row + 2, bankNameCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row + 2, bankNameCol + 1].Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
|
|
worksheet.Cells[row + 2, bankNameCol + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
|
|
|
|
|
|
|
|
|
|
worksheet.Cells[row, bankNameCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row, bankNameCol + 2].Style.Border.Right.Style = ExcelBorderStyle.Thick;
|
|
|
|
worksheet.Cells[row + 1, bankNameCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row + 1, bankNameCol + 2].Style.Border.Right.Style = ExcelBorderStyle.Thick;
|
|
|
|
|
|
worksheet.Cells[row + 2, bankNameCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
worksheet.Cells[row + 2, bankNameCol + 2].Style.Border.Right.Style = ExcelBorderStyle.Thick;
|
|
worksheet.Cells[row + 2, bankNameCol + 2].Style.Border.Bottom.Style = ExcelBorderStyle.Thick;
|
|
|
|
|
|
|
|
var bankAccountsCount = personnel.BankAccounts.Count;
|
|
if (j < bankAccountsCount)
|
|
{
|
|
worksheet.Cells[row, bankNameCol + 1].Value = "کارت";
|
|
|
|
worksheet.Cells[row + 1, bankNameCol + 1].Value = "شبا";
|
|
|
|
worksheet.Cells[row + 2, bankNameCol + 1].Value = "حساب";
|
|
|
|
var bankInfo = personnel.BankAccounts.OrderByDescending(x => x.IsDefault).ToList()[j];
|
|
|
|
bankCell.Value = string.IsNullOrWhiteSpace(bankInfo.BankName) ? "-" : bankInfo.BankName;
|
|
|
|
worksheet.Cells[row , bankNameCol + 2].Style.HorizontalAlignment = string.IsNullOrWhiteSpace(bankInfo.CardNumber)? ExcelHorizontalAlignment.Center:ExcelHorizontalAlignment.General;
|
|
worksheet.Cells[row + 1, bankNameCol + 2].Style.HorizontalAlignment = string.IsNullOrWhiteSpace(bankInfo.ShebaNumber) ? ExcelHorizontalAlignment.Center : ExcelHorizontalAlignment.General;
|
|
worksheet.Cells[row + 2, bankNameCol + 2].Style.HorizontalAlignment = string.IsNullOrWhiteSpace(bankInfo.AccountNumber) ? ExcelHorizontalAlignment.Center : ExcelHorizontalAlignment.General;
|
|
|
|
|
|
worksheet.Cells[row, bankNameCol + 2].Value = string.IsNullOrWhiteSpace(bankInfo.CardNumber) ? "-" : bankInfo.CardNumber;
|
|
worksheet.Cells[row + 1, bankNameCol + 2].Value = string.IsNullOrWhiteSpace(bankInfo.ShebaNumber) ? "-" : bankInfo.ShebaNumber;
|
|
worksheet.Cells[row + 2, bankNameCol + 2].Value = string.IsNullOrWhiteSpace(bankInfo.AccountNumber) ? "-" : bankInfo.AccountNumber;
|
|
|
|
|
|
|
|
if (bankInfo.IsDefault)
|
|
{
|
|
worksheet.Cells[row, bankNameCol, row + 2, bankNameCol + 2].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
|
|
worksheet.Cells[row, bankNameCol, row + 2, bankNameCol + 2].Style.Fill.BackgroundColor.SetColor(1, 198, 224, 180);
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
bankCell.Value = "-";
|
|
|
|
worksheet.Cells[row, bankNameCol + 1].Value = "-";
|
|
|
|
worksheet.Cells[row + 1, bankNameCol + 1].Value = "-";
|
|
|
|
worksheet.Cells[row + 2, bankNameCol + 1].Value = "-";
|
|
}
|
|
|
|
worksheet.Columns[bankNameCol].Width = 15;
|
|
worksheet.Columns[bankNameCol + 2].Width = 16;
|
|
worksheet.Columns[1].Width = 16;
|
|
|
|
|
|
bankNameCol += 3;
|
|
}
|
|
|
|
row += 3;
|
|
}
|
|
|
|
// Adjust column widths
|
|
//worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
|
|
|
|
|
|
|
|
worksheet.View.RightToLeft = true;
|
|
|
|
return package.GetAsByteArray();
|
|
}
|
|
|
|
|
|
|
|
public static byte[] Generate2(List<EmployeeBankInfoExcelViewModel> list)
|
|
{
|
|
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
|
|
using var package = new ExcelPackage();
|
|
foreach (var employee in list)
|
|
{
|
|
var worksheet = package.Workbook.Worksheets.Add(employee.Name);
|
|
|
|
// تنظیم هدر ستونها
|
|
worksheet.Cells[1, 1].Value = "Bank Name";
|
|
worksheet.Cells[1, 2].Value = "Card Number";
|
|
worksheet.Cells[1, 3].Value = "Account Number";
|
|
worksheet.Cells[1, 4].Value = "Sheba Number";
|
|
worksheet.Cells[1, 5].Value = "Is Default";
|
|
|
|
for (int i = 0; i < employee.BankAccounts.Count; i++)
|
|
{
|
|
var account = employee.BankAccounts[i];
|
|
int row = i + 2;
|
|
|
|
worksheet.Cells[row, 1].Value = account.BankName;
|
|
worksheet.Cells[row, 2].Value = account.CardNumber;
|
|
worksheet.Cells[row, 3].Value = account.AccountNumber;
|
|
worksheet.Cells[row, 4].Value = account.ShebaNumber;
|
|
worksheet.Cells[row, 5].Value = account.IsDefault ? "Yes" : "No";
|
|
|
|
// استایلدهی به سطرها
|
|
worksheet.Cells[row, 1, row, 5].Style.Fill.PatternType = ExcelFillStyle.Solid;
|
|
worksheet.Cells[row, 1, row, 5].Style.Fill.BackgroundColor
|
|
.SetColor(account.IsDefault ? System.Drawing.Color.Green : System.Drawing.Color.White);
|
|
|
|
// استایلدهی به متن
|
|
worksheet.Cells[row, 1, row, 5].Style.Font.Color
|
|
.SetColor(account.IsDefault ? System.Drawing.Color.White : System.Drawing.Color.Black);
|
|
}
|
|
}
|
|
|
|
return package.GetAsByteArray();
|
|
}
|
|
|
|
private static void ApplyHeaderStyle(ExcelRange cell)
|
|
{
|
|
cell.Style.Font.Bold = true;
|
|
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
|
cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
|
|
cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
|
cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
}
|
|
|
|
private static void ApplyGeneralDataStyle(ExcelRange cell)
|
|
{
|
|
cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
|
|
cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
|
cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
|
cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
|
|
}
|
|
}
|