273 lines
9.1 KiB
C#
273 lines
9.1 KiB
C#
using FamilyTreeAPI.Entities;
|
|
using FamilyTreeAPI.Interface;
|
|
using FamilyTreeAPI.Models;
|
|
using SpreadsheetLight;
|
|
using System.Linq;
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
|
namespace FamilyTreeAPI.Repository;
|
|
|
|
public class ReportRepository : IReport
|
|
{
|
|
private enum EnumStaffWork
|
|
{
|
|
Id = 0,
|
|
FirstName,
|
|
LastName,
|
|
StartDate,
|
|
startTime,
|
|
stopTime,
|
|
Task,
|
|
Job,
|
|
Hour
|
|
};
|
|
private readonly FamilyTreeDBContext _context;
|
|
//private readonly ILookup _lookup;
|
|
const string DateTimeFormat = "dd/MM/yyyy HH:mm";
|
|
const string TimeFormat = "HH:mm";
|
|
const string DateFormat = "dd/MM/yyyy";
|
|
private readonly IStaff _staff;
|
|
private Dictionary<int, StaffDto> _dstaff;
|
|
private readonly ILookup _lookup;
|
|
private string DisplayTime(DateTime date)
|
|
{
|
|
string result = "";
|
|
if (date != DateTime.MinValue)
|
|
result = date.ToString(TimeFormat);
|
|
return result;
|
|
}
|
|
|
|
private string DisplayDateTime(DateTime? date)
|
|
{
|
|
string result = "";
|
|
if (date != DateTime.MinValue)
|
|
result = date!.Value.ToString(DateFormat);
|
|
return result;
|
|
}
|
|
private string FormatTime(int hour)
|
|
{
|
|
string result;
|
|
if (hour < 10)
|
|
result = "0" + hour.ToString() + ":00";
|
|
else
|
|
result = hour.ToString() + ":00";
|
|
return result;
|
|
}
|
|
|
|
public ReportRepository(FamilyTreeDBContext context, ILookup lookup,IStaff staff)
|
|
{
|
|
_context = context;
|
|
_lookup = lookup;
|
|
_staff = staff;
|
|
}
|
|
|
|
// public async Task<ResultModel<FileContent>> GetStaffWorkReportAsync(StaffWorkCriteria criteria)
|
|
// {
|
|
// //var data = await _lookup.GetLookupDicAsync("TypeOfUse");
|
|
// //if (data != null)
|
|
// //{
|
|
// // this._ServiceTypeDic = data.Data;
|
|
// //}
|
|
// var rstaff = await _staff.GetDicStaffs();
|
|
// if (rstaff.StatusCode == 1)
|
|
// _dstaff = rstaff.Data;
|
|
// //data = await _lookup.GetLookupDicAsync("Status");
|
|
// //if (data != null)
|
|
// //{
|
|
// // this._StatusDic = data.Data;
|
|
// //}
|
|
// int statusCode = 1;
|
|
// int col = 1;
|
|
// int row = 1;
|
|
// SLDocument sl = new SLDocument();
|
|
// SLStyle styleRed = sl.CreateStyle();
|
|
// styleRed.SetFontColor(System.Drawing.Color.Red);
|
|
|
|
|
|
|
|
// //first sheetName
|
|
// sl.RenameWorksheet(SLDocument.DefaultFirstSheetName, "Staff Work Report");
|
|
// SLStyle style = sl.CreateStyle();
|
|
// style.SetFontUnderline(DocumentFormat.OpenXml.Spreadsheet.UnderlineValues.Single);
|
|
// style.SetFontBold(true);
|
|
// style.SetFont("Calibri", 14);
|
|
// sl.SetCellStyle(1, 3, style);
|
|
// sl.SetRowHeight(1, 1, 25);
|
|
// sl.SetCellValue(row++, 3, "Staff Work");
|
|
// // sl.SetCellValue(row, 3, "From Date: " + fromDate.ToString(DateFormat) + " - " + toDate.ToString(DateFormat));
|
|
// sl.SetCellValue(1, 6, " " + DateTime.Now.ToString("ddd dd/MM/yyyy HH:mm"));
|
|
// // sl.SetCellValue(row, 6, "Hospital: " + facility);
|
|
|
|
|
|
// int startTitleRow = 3;
|
|
// row = startTitleRow;
|
|
// //make the title bold
|
|
// style = sl.CreateStyle();
|
|
// style.Font.Bold = true;
|
|
// sl.SetRowStyle(startTitleRow, style);
|
|
// //set it height
|
|
// sl.SetRowHeight(startTitleRow, startTitleRow, 25);
|
|
// // add the title first
|
|
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.Id, "Id");
|
|
// sl.SetCellValue(row, (int) EnumStaffWork.FirstName, "FirstName");
|
|
// sl.SetCellValue(row, (int) EnumStaffWork.LastName, "SurName");
|
|
// sl.SetCellValue(row, (int) EnumStaffWork.StartDate, "StartDate");
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.startTime, "Start Time");
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.stopTime, "Stop Time");
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.Hour, "Hour");
|
|
|
|
// /*
|
|
// style = sl.CreateStyle();
|
|
// style.SetFontColor(System.Drawing.Color.Blue);
|
|
// sl.SetRowStyle(row, style);
|
|
// */
|
|
// sl.FreezePanes(row, 0); //frozen the row.
|
|
// //wrap text on is concession Expiry
|
|
// style = sl.CreateStyle();
|
|
// style.SetWrapText(true);
|
|
// sl.SetColumnStyle(4, style);
|
|
|
|
// //format date
|
|
|
|
// // style = sl.CreateStyle();
|
|
// //style.FormatCode = DateTimeFormat;
|
|
// // sl.SetColumnStyle(1, style);
|
|
// //make column width
|
|
// sl.SetColumnWidth((int)EnumStaffWork.Id, 10);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.FirstName, 30);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.LastName, 30);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.StartDate, 25);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.startTime, 10);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.stopTime, 10);
|
|
// sl.SetColumnWidth((int)EnumStaffWork.Hour, 20);
|
|
|
|
|
|
// style = sl.CreateStyle();
|
|
// style.FormatCode = DateFormat;
|
|
// sl.SetColumnStyle(5, style);
|
|
// //style = sl.CreateStyle();
|
|
// //style.FormatCode = DateTimeFormat;
|
|
// //sl.SetColumnStyle(1, style);
|
|
// sl.SetColumnWidth(10, 20);
|
|
|
|
// int startRowFrom = startTitleRow + 1;
|
|
|
|
//// DateTime ttdate = toDate.ToLocalTime(); //add 1 days so if to inclusive todate 02/09
|
|
// var container = await _context.LoadStaffWorkAsync(criteria); //fromDate.ToLocalTime(), ttdate.AddDays(1), typeOfCall);
|
|
// var list = container;
|
|
// list.Sort((x, y) => x.StartDate.Value.CompareTo(y.StartDate.Value));
|
|
// StaffWorkViewDto item;
|
|
// DateTime startTime, stopTime;
|
|
// double hour =0;
|
|
// string fname, lname;
|
|
// StaffWorkDetailDto detail;
|
|
// for (int i = 0; i < list.Count; i++)
|
|
// {
|
|
|
|
// item = list[i];
|
|
// row = i + startRowFrom;
|
|
// (startTime, stopTime ) = GetSSTime(item);
|
|
// if (item.Details != null)
|
|
// for (int j = 0; j < item.Details.Count; j++)
|
|
// {
|
|
// detail = item.Details[j];
|
|
// hour += detail.TotalMinuts();
|
|
// }
|
|
// (fname, lname) = GetStaffName(item.StaffId.Value);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.StartDate, item.StartDate.Value);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.FirstName, fname);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.LastName, lname);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.startTime, startTime);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.stopTime, stopTime);
|
|
// sl.SetCellValue(row, (int)EnumStaffWork.Hour, hour/60);
|
|
|
|
// }
|
|
|
|
// byte[] array;
|
|
// // sl.SaveAs("C:\\Temp\\Report\\ConcessionValidationDate" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx");
|
|
// using (MemoryStream ws = new MemoryStream())
|
|
// {
|
|
// sl.SaveAs(ws);
|
|
// array = ws.ToArray();
|
|
// /*
|
|
// using (FileStream fs = new FileStream("c:\\temp\\Report\\conReport.xlsx",FileMode.Create,FileAccess.Write))
|
|
// {
|
|
// ws.WriteTo(fs);
|
|
// fs.Close();
|
|
// }
|
|
// */
|
|
// ws.Close();
|
|
// }
|
|
|
|
// var result = new FileContent
|
|
// {
|
|
// Content = array,
|
|
// FileName = "StaffWork_Report" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm") + ".xlsx",
|
|
// };
|
|
|
|
// return new ResultModel<FileContent>
|
|
// {
|
|
// Data = result,
|
|
// StatusCode = statusCode
|
|
// };
|
|
|
|
// }
|
|
private (string, string) GetStaffName(int staffId)
|
|
{
|
|
|
|
StaffDto staff;
|
|
if (_dstaff.ContainsKey(staffId))
|
|
{
|
|
staff = _dstaff[staffId];
|
|
return ( staff.Firstname ?? "" , staff.Lastname ?? "");
|
|
}
|
|
return ("","");
|
|
}
|
|
//private (DateTime firstTime, DateTime lastTime) GetSSTime(StaffWorkViewDto item)
|
|
//{
|
|
// DateTime sTime, lTime;
|
|
// DateTime? value;
|
|
// int count = 0;
|
|
// sTime = lTime = DateTime.Now;
|
|
// List<StaffWorkDetailDto> detail = item.Details ?? new();
|
|
// count = detail.Count;
|
|
// if (count > 0)
|
|
// {
|
|
|
|
// value = detail[0].StartTime;
|
|
// if (value.HasValue)
|
|
// {
|
|
// sTime = value.Value;
|
|
// }
|
|
// value = detail[count - 1].StopTime;
|
|
// if (value.HasValue)
|
|
// {
|
|
// lTime = value.Value;
|
|
// }
|
|
// }
|
|
// return (sTime, lTime);
|
|
//}
|
|
private string GetValue(string item, string text)
|
|
{
|
|
string result = item;
|
|
if (!string.IsNullOrEmpty(text))
|
|
result = text;
|
|
return result;
|
|
}
|
|
//private string GetPools(List<string> poolIds)
|
|
//{
|
|
// string result = "";
|
|
// string id;
|
|
// for (int i = 0; i < poolIds.Count; i++)
|
|
// {
|
|
// id = poolIds[i];
|
|
// if (this._PoolDic.ContainsKey(id))
|
|
// result += _PoolDic[id].Description + ",";
|
|
// }
|
|
// result = result.Remove(result.Length-1, 1);
|
|
// return result;
|
|
//}
|
|
|
|
}
|