Skip to content

Instantly share code, notes, and snippets.

@ShilGen
Last active June 23, 2023 06:36
Show Gist options
  • Save ShilGen/89f417549d430e0dae3856fff284ded6 to your computer and use it in GitHub Desktop.
Save ShilGen/89f417549d430e0dae3856fff284ded6 to your computer and use it in GitHub Desktop.
// ПБК: Даты поверки приборов учёта абонента
// №пп | ТУ | ПУ | Класс точности | Дата последней поверки | Дата следующей поверки
var workSheet = WorkbookNonExcel.Worksheets.FirstOrDefault();
var currentUser = RDClassesAndInstances.SecurityManager.CurrentUser;
var consumerUser = currentUser as ConsumerUser;
var consumer = consumerUser == null ? null : consumerUser.AttributeConsumer;
if (consumer == null)
throw new Exception("Пользователь не является абонентом");
var meterPoints = consumer.AttributeMeterPoints.GetValues();
if (!string.IsNullOrEmpty(ReportFileName))
workSheet.Cells[0, 0].Value = ReportFileName;
workSheet.Cells[1, 0].Value = string.Format("Сформирован {0:dd.MM.yyyy HH:mm}", DateTime.UtcNow.AddHours(User.GetClassInfo().GetCurrentUserTimeZoneOffset()));
// размеры таблицы и т.п.
var tableColumnsCount = 6;
var tableStartRow = 7;
var meterPointIndex = 0;
workSheet.Cells[3, 0].Value = string.Format("Абонент: {0}", consumer.Caption);
var naturalPerson = consumer as NaturalPerson;
var legalEntity = consumer as LegalEntity;
var address = naturalPerson != null ? naturalPerson.AttributeRegistration : legalEntity != null ? legalEntity.AttributeAddress : string.Empty;
workSheet.Cells[4, 0].Value = string.Format("Адрес: {0}", address);
var now = DateTime.Now;
var afterThreeMonth = now.AddMonths(3);
var warningRanges = new List<string>(); // подсветка желтым, если дата следующей поверки предстоит менее чем через 3 месяца
var errorRanges = new List<string>(); // подсветка красным, если дата следующей поверки уже просрочена
var index = tableStartRow;
// построение таблицы
foreach (var meterPoint in meterPoints)
{
workSheet.Cells[index, 0].Value = meterPointIndex + 1;
workSheet.Cells[index, 1].Value = meterPoint.AttributeDisplayedCaption;
var meter = meterPoint.AttributeElectricityMeter;
workSheet.Cells[index, 2].Value = (meter != null) ? meter.Caption : "-";
workSheet.Cells[index, 3].Value = "-";
workSheet.Cells[index, 4].Value = "-";
if (meter != null)
{
if (meter.AttributeAccuracyClass != null)
workSheet.Cells[index, 3].Value = meter.AttributeAccuracyClass.ToString();
if (meter.AttributeLastCalibrationDate.HasValue)
workSheet.Cells[index, 4].Value = meter.AttributeLastCalibrationDate.Value.ToString("dd.MM.yyyy HH:mm");
if (meter.AttributeNextCalibrationDate.HasValue)
{
workSheet.Cells[index, 5].Value = meter.AttributeNextCalibrationDate.Value.ToString("dd.MM.yyyy HH:mm");
if (meter.AttributeNextCalibrationDate.Value < now)
workSheet.Cells.GetSubrangeAbsolute(index, 5, index, 5).SetColor(255, 0, 0);
else if (meter.AttributeNextCalibrationDate.Value < afterThreeMonth)
workSheet.Cells.GetSubrangeAbsolute(index, 5, index, 5).SetColor(255, 255, 0);
}
}
index++;
meterPointIndex++;
}
workSheet.Cells.GetSubrangeAbsolute(tableStartRow, 0, index - 1, 5).SetBorder();
#if !NETCORE
var startAutoFitRow = tableStartRow - 1;
var endAutoFitRow = tableStartRow + 5;
int columnCount = 6;
for (int i = 1; i < columnCount; i++)
workSheet.Columns[i].AutoFit(1, workSheet.Rows[startAutoFitRow], workSheet.Rows[endAutoFitRow]);
for (int j = startAutoFitRow; j <= endAutoFitRow; j++)
workSheet.Rows[j].AutoFit();
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment