| | | 1 | | using OzonDomains.Models.Partners; |
| | | 2 | | using Services.PartnerServices; |
| | | 3 | | |
| | | 4 | | namespace OzonOrdersWeb.WebServices.Partners; |
| | | 5 | | |
| | | 6 | | /// <summary>Строка грида партнёров. Всё, что раньше считалось во вьюхе, посчитано здесь, чтобы по нему работали фильтры |
| | | 7 | | public sealed record PartnerGridRow( |
| | | 8 | | long Id, |
| | | 9 | | string Name, |
| | | 10 | | string? Email, |
| | | 11 | | string? GoogleEmail, |
| | | 12 | | bool IsActive, |
| | | 13 | | DateTime? LastLoginAtUtc, |
| | | 14 | | int RulesCount, |
| | | 15 | | bool LabelPrint, |
| | | 16 | | bool Assemble, |
| | | 17 | | bool TrackNumber, |
| | | 18 | | string PermissionsText); |
| | | 19 | | |
| | | 20 | | /// <summary>Строки грида журнала партнёров: имя партнёра подставлено сервером, удалённый партнёр помечен.</summary> |
| | | 21 | | public sealed record PartnerAuditGridRow( |
| | | 22 | | long Id, |
| | | 23 | | DateTime OccurredAtUtc, |
| | | 24 | | long? PartnerId, |
| | | 25 | | string? PartnerName, |
| | | 26 | | string Actor, |
| | | 27 | | string ActorKind, |
| | | 28 | | string Action, |
| | | 29 | | string? OrderNumber, |
| | | 30 | | bool Success, |
| | | 31 | | string? Details, |
| | | 32 | | string? IpAddress); |
| | | 33 | | |
| | | 34 | | public static class PartnerGridRows |
| | | 35 | | { |
| | | 36 | | public const string ViewOnlyText = "Только просмотр"; |
| | | 37 | | |
| | | 38 | | public static IReadOnlyList<PartnerGridRow> Build(IEnumerable<PartnerListItemDto> partners) => |
| | 1 | 39 | | partners.Select(p => |
| | 1 | 40 | | { |
| | 2 | 41 | | var labels = p.Permissions.Select(PermissionTitle).ToList(); |
| | 2 | 42 | | return new PartnerGridRow( |
| | 2 | 43 | | p.Id, p.Name, p.Email, p.GoogleEmail, p.IsActive, p.LastLoginAtUtc, p.RulesCount, |
| | 2 | 44 | | p.Permissions.Contains(PartnerPermissionCode.LabelPrint), |
| | 2 | 45 | | p.Permissions.Contains(PartnerPermissionCode.Assemble), |
| | 2 | 46 | | p.Permissions.Contains(PartnerPermissionCode.TrackNumber), |
| | 2 | 47 | | labels.Count == 0 ? ViewOnlyText : string.Join(", ", labels)); |
| | 1 | 48 | | }).ToList(); |
| | | 49 | | |
| | 2 | 50 | | public static string PermissionTitle(PartnerPermissionCode code) => code switch |
| | 2 | 51 | | { |
| | 1 | 52 | | PartnerPermissionCode.LabelPrint => "Этикетки", |
| | 0 | 53 | | PartnerPermissionCode.Assemble => "Сборка и отгрузка", |
| | 1 | 54 | | PartnerPermissionCode.TrackNumber => "Трек-номер", |
| | 0 | 55 | | _ => code.ToString() |
| | 2 | 56 | | }; |
| | | 57 | | |
| | 3 | 58 | | public static string ActorKindTitle(PartnerActorKind kind) => kind switch |
| | 3 | 59 | | { |
| | 1 | 60 | | PartnerActorKind.Owner => "Владелец", |
| | 2 | 61 | | PartnerActorKind.Partner => "Партнёр", |
| | 0 | 62 | | _ => "Система" |
| | 3 | 63 | | }; |
| | | 64 | | |
| | | 65 | | public static IReadOnlyList<PartnerAuditGridRow> BuildAudit( |
| | | 66 | | IEnumerable<PartnerAuditLog> rows, IReadOnlyDictionary<long, string> partnerNames) => |
| | 4 | 67 | | rows.Select(r => new PartnerAuditGridRow( |
| | 4 | 68 | | r.Id, r.OccurredAtUtc, r.PartnerId, |
| | 4 | 69 | | r.PartnerId is { } id ? partnerNames.GetValueOrDefault(id, "(удалён)") : null, |
| | 4 | 70 | | r.Actor, ActorKindTitle(r.ActorKind), r.Action, r.OrderNumber, r.Success, r.Details, r.IpAddress)).ToList(); |
| | | 71 | | } |