using System; namespace XLAB2 { public sealed class GroupOption { public string Key { get; set; } public string Title { get; set; } public override string ToString() { return Title ?? string.Empty; } } public sealed class CustomerReference { public int CustomerId { get; set; } public string CustomerName { get; set; } public override string ToString() { return CustomerName ?? string.Empty; } } public sealed class PsvDocumentSummary : ObservableObject { private DateTime? _acceptedOn; private string _customerName; private int? _customerId; private string _departmentName; private string _documentKey; private string _documentNumber; private int _failedCount; private bool _isDraft; private int _issuedCount; private DateTime? _issuedOn; private int _itemCount; private int _passedCount; private string _serialNumbersText; public DateTime? AcceptedOn { get { return _acceptedOn; } set { if (SetProperty(ref _acceptedOn, value)) { OnPropertyChanged("AcceptedMonthGroup"); RaiseOpenDocumentTimelinePropertiesChanged(); } } } public string AcceptedMonthGroup { get { return AcceptedOn.HasValue ? AcceptedOn.Value.ToString("yyyy-MM") : "Без даты"; } } public string CustomerName { get { return _customerName; } set { SetProperty(ref _customerName, value); } } public int? CustomerId { get { return _customerId; } set { SetProperty(ref _customerId, value); } } public string DepartmentName { get { return _departmentName; } set { SetProperty(ref _departmentName, value); } } public string DocumentKey { get { return _documentKey; } set { SetProperty(ref _documentKey, value); } } public string DocumentNumber { get { return _documentNumber; } set { SetProperty(ref _documentNumber, value); } } public string SerialNumbersText { get { return _serialNumbersText; } set { SetProperty(ref _serialNumbersText, value); } } public int FailedCount { get { return _failedCount; } set { SetProperty(ref _failedCount, value); } } public bool IsDraft { get { return _isDraft; } set { SetProperty(ref _isDraft, value); } } public int IssuedCount { get { return _issuedCount; } set { SetProperty(ref _issuedCount, value); } } public DateTime? IssuedOn { get { return _issuedOn; } set { if (SetProperty(ref _issuedOn, value)) { RaiseOpenDocumentTimelinePropertiesChanged(); } } } public int ItemCount { get { return _itemCount; } set { SetProperty(ref _itemCount, value); } } public int PassedCount { get { return _passedCount; } set { SetProperty(ref _passedCount, value); } } public DateTime? DueOn { get { return AcceptedOn.HasValue ? AcceptedOn.Value.Date.AddDays(30) : (DateTime?)null; } } public string TimelineDisplay { get { if (IssuedOn.HasValue) { return string.Format("Выдача: {0:d}", IssuedOn.Value); } return DueOn.HasValue ? string.Format("Срок: {0:d}", DueOn.Value) : string.Empty; } } public bool IsOpenDocumentOverdue { get { return !IssuedOn.HasValue && DueOn.HasValue && DateTime.Today.Date >= DueOn.Value.Date; } } public bool IsOpenDocumentAtTwentyDays { get { return !IssuedOn.HasValue && AcceptedOn.HasValue && !IsOpenDocumentOverdue && (DateTime.Today.Date - AcceptedOn.Value.Date).TotalDays >= 20; } } public bool IsOpenDocumentAtTenDays { get { return !IssuedOn.HasValue && AcceptedOn.HasValue && !IsOpenDocumentOverdue && !IsOpenDocumentAtTwentyDays && (DateTime.Today.Date - AcceptedOn.Value.Date).TotalDays >= 10; } } private void RaiseOpenDocumentTimelinePropertiesChanged() { OnPropertyChanged("DueOn"); OnPropertyChanged("TimelineDisplay"); OnPropertyChanged("IsOpenDocumentOverdue"); OnPropertyChanged("IsOpenDocumentAtTwentyDays"); OnPropertyChanged("IsOpenDocumentAtTenDays"); } } public sealed class PsvDocumentLine : ObservableObject { private bool _isBatchSelected; private string _notes; public int CardId { get; set; } public int InstrumentId { get; set; } public int TypeSizeId { get; set; } public string SerialNumber { get; set; } public string InventoryNumber { get; set; } public string CustomerName { get; set; } public string InstrumentType { get; set; } public string InstrumentName { get; set; } public string MeasurementArea { get; set; } public string RangeText { get; set; } public string RegistryNumber { get; set; } public string AccuracyText { get; set; } public string VerificationType { get; set; } public int PeriodMonths { get; set; } public DateTime? AcceptedOn { get; set; } public DateTime? IssuedOn { get; set; } public bool? IsPassed { get; set; } public DateTime? VerificationPerformedOn { get; set; } public int? VerifierId { get; set; } public string VerifierName { get; set; } public string StickerNumber { get; set; } public int? VerificationDocumentFormId { get; set; } public int? VerificationDocumentLinkTypeId { get; set; } public string VerificationDocumentNumber { get; set; } public DateTime? VerificationDocumentDate { get; set; } public string RejectionReason { get; set; } public string Notes { get { return _notes; } set { if (SetProperty(ref _notes, value)) { OnPropertyChanged("Completeness"); } } } public string Completeness { get { return Notes; } set { Notes = value; } } public bool IsPendingInsert { get; set; } public bool IsBatchSelected { get { return _isBatchSelected; } set { SetProperty(ref _isBatchSelected, value); } } public string DuplicateKey { get { return BuildDuplicateKey(InstrumentType, RangeText, RegistryNumber, SerialNumber); } } public string OpenDocumentConflictKey { get { return BuildOpenDocumentConflictKey(TypeSizeId, SerialNumber); } } public string ResultText { get { if (!IsPassed.HasValue) { return string.Empty; } return IsPassed.Value ? "Годен" : "Не годен"; } } public string VerificationDateDisplay { get { var verificationDate = VerificationPerformedOn ?? VerificationDocumentDate; return verificationDate.HasValue ? verificationDate.Value.ToString("d") : string.Empty; } } public string VerificationDocumentDisplay { get { if (string.IsNullOrWhiteSpace(VerificationDocumentNumber)) { return VerificationDocumentDate.HasValue ? VerificationDocumentDate.Value.ToString("d") : string.Empty; } if (!VerificationDocumentDate.HasValue) { return VerificationDocumentNumber; } return string.Format("{0} от {1:d}", VerificationDocumentNumber, VerificationDocumentDate.Value); } } public static string BuildDuplicateKey(string instrumentType, string rangeText, string registryNumber, string serialNumber) { return string.Join("|", NormalizeKeyPart(instrumentType), NormalizeKeyPart(rangeText), NormalizeKeyPart(registryNumber), NormalizeKeyPart(serialNumber)); } public static string BuildOpenDocumentConflictKey(int typeSizeId, string serialNumber) { return string.Format("{0}|{1}", typeSizeId, NormalizeKeyPart(serialNumber)); } private static string NormalizeKeyPart(string value) { return string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim().ToUpperInvariant(); } } public sealed class PsvDocumentGroupSummary : ObservableObject { private bool _isBatchSelected; public string InstrumentName { get; set; } public string InstrumentType { get; set; } public string RangeText { get; set; } public string RegistryNumber { get; set; } public string SerialNumbersText { get; set; } public int InVerificationCount { get; set; } public int VerifiedCount { get; set; } public int GoodCount { get; set; } public int RejectedCount { get; set; } public bool IsBatchSelected { get { return _isBatchSelected; } set { SetProperty(ref _isBatchSelected, value); } } public bool Matches(PsvDocumentLine line) { return line != null && string.Equals(InstrumentType ?? string.Empty, line.InstrumentType ?? string.Empty, StringComparison.OrdinalIgnoreCase) && string.Equals(RangeText ?? string.Empty, line.RangeText ?? string.Empty, StringComparison.OrdinalIgnoreCase) && string.Equals(RegistryNumber ?? string.Empty, line.RegistryNumber ?? string.Empty, StringComparison.OrdinalIgnoreCase); } } public sealed class AvailableInstrumentItem : ObservableObject { private bool _isSelected; public string AccuracyText { get; set; } public string CustomerName { get; set; } public bool HasTemplate { get; set; } public int InstrumentId { get; set; } public string InstrumentName { get; set; } public string InstrumentType { get; set; } public string InventoryNumber { get; set; } public bool IsSelected { get { return _isSelected; } set { SetProperty(ref _isSelected, value); } } public DateTime? LastAcceptedOn { get; set; } public string LastDocumentNumber { get; set; } public string MeasurementArea { get; set; } public string RangeText { get; set; } public string RegistryNumber { get; set; } public string SerialNumber { get; set; } public string TemplateSource { get; set; } public int TypeSizeId { get; set; } } public sealed class PersonReference { public int PersonId { get; set; } public string FullName { get; set; } public override string ToString() { return FullName ?? string.Empty; } } public sealed class SpnmtpDirectoryItem { public int Id { get; set; } public string Name { get; set; } public string SpecialName { get; set; } } internal sealed class SpnmtpDeleteResult { public bool IsDeleted { get; set; } public string WarningMessage { get; set; } } public sealed class SpoiDirectoryItem { public int Id { get; set; } public string Code { get; set; } public string Name { get; set; } } internal sealed class SpoiDeleteResult { public bool IsDeleted { get; set; } public string WarningMessage { get; set; } } internal static class SpoiDirectoryRules { public const int CodeMaxLength = 3; public const int NameMaxLength = 80; } internal static class SpnmtpDirectoryRules { public const int NameMaxLength = 150; public const int SpecialNameMaxLength = 150; } public sealed class DocumentFormReference { public int DocumentFormId { get; set; } public int LinkTypeId { get; set; } public string DocumentKindName { get; set; } public string DocumentFormName { get; set; } public override string ToString() { return DocumentFormName ?? string.Empty; } } public sealed class DocumentEditorResult { public string DocumentNumber { get; set; } public DateTime AcceptedOn { get; set; } public DateTime? IssuedOn { get; set; } public int? CustomerId { get; set; } } public sealed class InstrumentTypeSelectionResult { public AvailableInstrumentItem TypeItem { get; set; } public string SerialNumber { get; set; } } public sealed class VerificationEditSeed { public DocumentFormReference DocumentForm { get; set; } public bool IsPassed { get; set; } public string RejectionReason { get; set; } public string StickerNumber { get; set; } public DateTime? VerificationDate { get; set; } public string VerificationDocumentNumber { get; set; } public int? VerifierId { get; set; } } public sealed class CloneVerificationSeed { public string SourceSerialNumber { get; set; } public string VerificationSummary { get; set; } } public sealed class VerificationEditResult { public int DocumentFormId { get; set; } public int DocumentLinkTypeId { get; set; } public bool IsPassed { get; set; } public string RejectionReason { get; set; } public string StickerNumber { get; set; } public DateTime VerificationDate { get; set; } public string VerificationDocumentNumber { get; set; } public int VerifierId { get; set; } public string VerifierName { get; set; } } internal sealed class OpenDocumentConflictInfo { public string DocumentNumber { get; set; } public int TypeSizeId { get; set; } public string SerialNumber { get; set; } public string OpenDocumentConflictKey { get { return PsvDocumentLine.BuildOpenDocumentConflictKey(TypeSizeId, SerialNumber); } } } internal sealed class DocumentDeleteResult { public int DeletedEkzMkFctvlCount { get; set; } public int DeletedEkzMkCount { get; set; } public int DeletedDmsCount { get; set; } } internal sealed class DocumentGroupDeleteResult { public int DeletedEkzMkFctvlCount { get; set; } public int DeletedEkzMkCount { get; set; } public int DeletedDmsCount { get; set; } } internal sealed class DocumentSaveResult { public string DocumentNumber { get; set; } public int InsertedEkzMkCount { get; set; } public int SkippedDuplicateCount { get; set; } public int SkippedWithoutTemplateCount { get; set; } public int UpdatedEkzMkCount { get; set; } } internal sealed class EkzMkTemplate { public string Dpznmp { get; set; } public string Hrtcmp { get; set; } public int? IdEkzetl { get; set; } public int IdFrpd { get; set; } public int? IdGrsi { get; set; } public int? IdKsp { get; set; } public int? IdKsprl { get; set; } public int? IdPrsn { get; set; } public int? IdPrsnpr { get; set; } public int? IdPrsnsd { get; set; } public int? IdPrsnvd { get; set; } public int? IdPrsnvy { get; set; } public int? IdSpkmmk { get; set; } public int? IdSpmpob { get; set; } public int? IdSpmu { get; set; } public int? IdSpssmp { get; set; } public int? IdSptsmp { get; set; } public int? IdSpvdmk { get; set; } public int? IdSpvdkl { get; set; } public int? IdSpvdsbmk { get; set; } public int? IdSpvdmc { get; set; } public decimal? NcSrmk { get; set; } public decimal? Nrvrmmp { get; set; } public decimal? Nrvrmndmp { get; set; } public int Prmk { get; set; } public string SourceDescription { get; set; } public decimal? Stmk { get; set; } public decimal? Stmkdp { get; set; } public decimal? Vrmkfk { get; set; } } }