protected override DataSet CreateDataSet(DataProvider dataProvider) { var filter = GetFilter<CardsReportFilter>(); var cardFilter = new CardFilter(); cardFilter.EmployeeFilter = dataProvider.GetCardEmployeeFilter(filter); if ((filter.PassCardActive && filter.PassCardInactive) || (!filter.PassCardActive && !filter.PassCardInactive)) cardFilter.DeactivationType = LogicalDeletationType.All; if (filter.PassCardActive && !filter.PassCardInactive) cardFilter.DeactivationType = LogicalDeletationType.Active; if (!filter.PassCardActive && filter.PassCardInactive) cardFilter.DeactivationType = LogicalDeletationType.Deleted; cardFilter.IsWithEndDate = filter.UseExpirationDate; if (filter.UseExpirationDate) switch (filter.ExpirationType) { case EndDateType.Day: cardFilter.EndDate = DateTime.Today.AddDays(1); break; case EndDateType.Week: cardFilter.EndDate = DateTime.Today.AddDays(7); break; case EndDateType.Month: cardFilter.EndDate = DateTime.Today.AddDays(31); break; case EndDateType.Arbitrary: cardFilter.EndDate = filter.ExpirationDate; break; } var cardsResult = dataProvider.DbService.CardTranslator.Get(cardFilter); var dataSet = new CardsDataSet(); if (!cardsResult.HasError) { dataProvider.GetEmployees(cardsResult.Result.Select(item => item.EmployeeUID.GetValueOrDefault())); foreach (var card in cardsResult.Result) { var dataRow = dataSet.Data.NewDataRow(); dataRow.Type = card.IsInStopList ? "Деактивированный" : card.GKCardType.ToDescription(); dataRow.Number = card.Number.ToString(); var employee = dataProvider.GetEmployee(card.EmployeeUID.GetValueOrDefault()); if (employee != null) { dataRow.Employee = employee.Name; dataRow.Organisation = employee.Organisation; dataRow.Department = employee.Department; dataRow.Position = employee.Position; } if (!card.IsInStopList) dataRow.Period = card.EndDate; dataSet.Data.Rows.Add(dataRow); } } return dataSet; }
protected override DataSet CreateDataSet(DataProvider dataProvider) { var filter = GetFilter<EmployeeAccessReportFilter>(); if (!filter.PassCardActive && !filter.PassCardForcing && !filter.PassCardLocked && !filter.PassCardOnceOnly && !filter.PassCardPermanent && !filter.PassCardTemprorary) { filter.PassCardActive = true; filter.PassCardForcing = true; filter.PassCardLocked = true; filter.PassCardOnceOnly = true; filter.PassCardPermanent = true; filter.PassCardTemprorary = true; } var cardFilter = new CardFilter(); cardFilter.EmployeeFilter = dataProvider.GetCardEmployeeFilter(filter); cardFilter.DeactivationType = LogicalDeletationType.Active; cardFilter.LogicalDeletationType = LogicalDeletationType.Active; var cardsResult = dataProvider.DbService.CardTranslator.Get(cardFilter); var dataSet = new EmployeeAccessDataSet(); if (!cardsResult.HasError) { dataProvider.GetEmployees(cardsResult.Result.Select(item => item.EmployeeUID.GetValueOrDefault())); var accessTemplateFilter = new AccessTemplateFilter() { UIDs = cardsResult.Result.Where(item => item.AccessTemplateUID.HasValue && item.AccessTemplateUID != Guid.Empty).Select(item => item.AccessTemplateUID.Value).ToList() }; var accessTemplates = dataProvider.DbService.AccessTemplateTranslator.Get(accessTemplateFilter); var zoneMap = new Dictionary<Guid, Tuple<Tuple<GKSKDZone, string>, Tuple<GKSKDZone, string>>>(); GKManager.Doors.ForEach(door => { if (door != null && !zoneMap.ContainsKey(door.UID)) { GKSKDZone enterZone = null; if (filter.Zones.IsEmpty() || filter.Zones.Contains(door.EnterZoneUID)) { enterZone = GKManager.SKDZones.FirstOrDefault(x => x.UID == door.EnterZoneUID); } GKSKDZone exitZone = null; if (filter.Zones.IsEmpty() || filter.Zones.Contains(door.ExitZoneUID)) { exitZone = GKManager.SKDZones.FirstOrDefault(x => x.UID == door.ExitZoneUID); } Tuple<GKSKDZone, string> enterZoneTuple = null; if (enterZone != null) { enterZoneTuple = new Tuple<GKSKDZone, string>(enterZone, enterZone.PresentationName); } Tuple<GKSKDZone, string> exitZoneTuple = null; if (exitZone != null) { exitZoneTuple = new Tuple<GKSKDZone, string>(exitZone, exitZone.PresentationName); } var value = new Tuple<Tuple<GKSKDZone, string>, Tuple<GKSKDZone, string>>(enterZoneTuple, exitZoneTuple); zoneMap.Add(door.UID, value); } }); foreach (var card in cardsResult.Result) { var employee = dataProvider.GetEmployee(card.EmployeeUID.GetValueOrDefault()); var addedZones = new List<Guid>(); foreach (var door in card.CardDoors) AddRow(dataSet, employee, card, door, null, zoneMap, addedZones); if (!accessTemplates.HasError && card.AccessTemplateUID.HasValue) { var cardDoorUIDs = card.CardDoors.Select(item => item.DoorUID); var accessTemplate = accessTemplates.Result.FirstOrDefault(item => item.UID == card.AccessTemplateUID.Value); if (accessTemplates != null) foreach (var door in accessTemplate.CardDoors.Where(item => !cardDoorUIDs.Contains(item.DoorUID))) AddRow(dataSet, employee, card, door, accessTemplate, zoneMap, addedZones); } } } return dataSet; }
protected override DataSet CreateDataSet(DataProvider dataProvider) { var filter = GetFilter<EmployeeDoorsReportFilter>(); if (!filter.PassCardActive && !filter.PassCardForcing && !filter.PassCardLocked && !filter.PassCardOnceOnly && !filter.PassCardPermanent && !filter.PassCardTemprorary) { filter.PassCardActive = true; filter.PassCardForcing = true; filter.PassCardLocked = true; filter.PassCardOnceOnly = true; filter.PassCardPermanent = true; filter.PassCardTemprorary = true; } if (!filter.ZoneIn && !filter.ZoneOut) { filter.ZoneIn = true; filter.ZoneOut = true; } if (!filter.ScheduleEnter && !filter.ScheduleExit) { filter.ScheduleEnter = true; filter.ScheduleExit = true; } var cardFilter = new CardFilter(); cardFilter.EmployeeFilter = dataProvider.GetCardEmployeeFilter(filter); cardFilter.DeactivationType = LogicalDeletationType.Active; cardFilter.LogicalDeletationType = LogicalDeletationType.Active; var cardsResult = dataProvider.DbService.CardTranslator.Get(cardFilter); var dataSet = new EmployeeDoorsDataSet(); if (!cardsResult.HasError) { dataProvider.GetEmployees(cardsResult.Result.Select(item => item.EmployeeUID.GetValueOrDefault())); var accessTemplateFilter = new AccessTemplateFilter() { UIDs = cardsResult.Result.Where(item => item.AccessTemplateUID.HasValue && item.AccessTemplateUID != Guid.Empty).Select(item => item.AccessTemplateUID.Value).ToList() }; var accessTemplates = dataProvider.DbService.AccessTemplateTranslator.Get(accessTemplateFilter); var doorMap = new Dictionary<Guid, CommonDoor>(); foreach (var door in GKManager.Doors) { var commonDoor = new CommonDoor(door); if (!filter.Zones.IsEmpty()) { if ((filter.ZoneIn && filter.Zones.Contains(door.EnterZoneUID)) || (filter.ZoneOut && filter.Zones.Contains(door.ExitZoneUID))) doorMap.Add(door.UID, commonDoor); } else { doorMap.Add(door.UID, commonDoor); } } Dictionary<int, string> intervalMap = new Dictionary<int, string>(); var schedulesResult = dataProvider.DbService.GKScheduleTranslator.Get(); if (!schedulesResult.HasError) { foreach (var interval in schedulesResult.Result) { intervalMap.Add(interval.No, interval.Name); } } foreach (var card in cardsResult.Result) { IEnumerable<CardDoor> cardDoors = card.CardDoors; if (!accessTemplates.HasError && card.AccessTemplateUID.HasValue && card.AccessTemplateUID.Value != Guid.Empty) { var accessTemplate = accessTemplates.Result.FirstOrDefault(item => item.UID == card.AccessTemplateUID.Value); var cardDoorUIDs = card.CardDoors.Select(item => item.DoorUID); if (accessTemplate != null) cardDoors = cardDoors.Union(accessTemplate.CardDoors.Where(item => !cardDoorUIDs.Contains(item.DoorUID))); } var employee = dataProvider.GetEmployee(card.EmployeeUID.GetValueOrDefault()); if (!filter.Schedules.IsEmpty()) cardDoors = cardDoors.Where(item => (filter.ScheduleEnter && filter.Schedules.Contains(item.EnterScheduleNo)) || (filter.ScheduleExit && filter.Schedules.Contains(item.ExitScheduleNo))); foreach (var cardDoor in cardDoors) if (doorMap.ContainsKey(cardDoor.DoorUID)) { var door = doorMap[cardDoor.DoorUID]; var dataRow = dataSet.Data.NewDataRow(); dataRow.Type = card.GKCardType.ToDescription(); dataRow.Number = card.Number.ToString(); if (employee != null) { dataRow.Employee = employee.Name; dataRow.Organisation = employee.Organisation; dataRow.Department = employee.Department; dataRow.Position = employee.Position; } dataRow.ZoneIn = door.EnterZoneName; dataRow.ZoneOut = door.ExitZoneName; dataRow.NoEnterZone = door.NoEnterZone; dataRow.NoExitZone = door.NoExitZone; if (intervalMap.ContainsKey(cardDoor.EnterScheduleNo)) dataRow.Enter = intervalMap[cardDoor.EnterScheduleNo]; if (door.Type != GKDoorType.OneWay && intervalMap.ContainsKey(cardDoor.ExitScheduleNo)) dataRow.Exit = intervalMap[cardDoor.ExitScheduleNo]; dataRow.AccessPoint = door.Name; dataRow.NoDoor = door.NoDoor; dataSet.Data.Rows.Add(dataRow); } } } return dataSet; }