220 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Base;
using gehGassiApp.Domain.Common;
namespace gehGassiApp.Domain.Lookup
{
/// <summary>
/// Repräsentiert Detail-Infos zu einem DogWalker
/// </summary>
public class DogWalkerInfo : SyncEntity
{
/// <summary>
/// Art des App-Users
/// </summary>
public AppUserType Type { get; set; }
/// <summary>
/// Nummer des App-Users
/// </summary>
public string Number { get; set; }
/// <summary>
/// Anrede / titel
/// </summary>
public string Title { get; set; }
/// <summary>
/// Vorname
/// </summary>
public string FirstName { get; set; }
/// <summary>
/// Nachname
/// </summary>
public string LastName { get; set; }
/// <summary>
/// Geschlecht
/// </summary>
public Sex Sex { get; set; }
/// <summary>
/// Optional - Geburtstag
/// </summary>
public DateTimeOffset? BirthDate { get; set; }
/// <summary>
/// Optional - Foto des Benutzers
/// </summary>
public string Photo { get; set; }
/// <summary>
/// Verifiziert
/// </summary>
public bool Verified { get; set; }
/// <summary>
/// Wann wurde die Verification erfolgreich durchlaufen?
/// </summary>
public DateTimeOffset? VerifiedDate { get; set; }
/// <summary>
/// Kontaktdaten
/// </summary>
public ContactMin Contact { get; set; }
/// <summary>
/// Adresse
/// </summary>
public Address Address { get; set; }
/// <summary>
/// Breitengrad der Adresse
/// </summary>
public double Lat { get; set; }
/// <summary>
/// Längengrad der Adresse
/// </summary>
public double Lng { get; set; }
/// <summary>
/// Interne Anmerkungen
/// </summary>
public string Comment { get; set; }
/// <summary>
/// Statistiken als Owner
/// </summary>
public RatingStatistics RatingStatistics { get; set; }
/// <summary>
/// Statistiken als Walker
/// </summary>
public RatingStatistics RatingStatisticsWalker { get; set; }
/// <summary>
/// Datum der Erstellung
/// </summary>
public DateTimeOffset Created { get; set; }
/// <summary>
/// Radius für Anfragen
/// </summary>
public double Radius { get; set; }
/// <summary>
/// Über mich
/// </summary>
public string About { get; set; }
/// <summary>
/// Welche Anfragen erlauben
/// </summary>
public DogWalkRequestType AllowedRequests { get; set; }
/// <summary>
/// nimmt Welpen an
/// </summary>
public bool PuppyAllowed { get; set; }
/// <summary>
/// Nimmt schwierige Hunde an
/// </summary>
public bool DifficultAllowed { get; set; }
/// <summary>
/// Aggressionsgrad des Hundes, wenn schwierige Hunde errlaubt
/// </summary>
public DogAggressionLevel AggressionLevel { get; set; }
/// <summary>
/// Akzeptierte Hundegröße
/// </summary>
public DogSize AcceptedSize { get; set; }
/// <summary>
/// Preis für einen Walk je Stunde
/// </summary>
public decimal PriceWalk { get; set; }
/// <summary>
/// Preis für Tagesbetreuung je Stunde
/// </summary>
public decimal PriceDay { get; set; }
/// <summary>
/// Preis für Sitting je Tag
/// </summary>
public decimal PriceSitting { get; set; }
/// <summary>
/// Walker ist derzeit für Buchungen nicht verfügbar
/// </summary>
public bool NotAvailable { get; set; }
/// <summary>
/// Optional: Info warum nicht verfügbar
/// </summary>
public string NotAvailableInfo { get; set; }
/// <summary>
/// Abstand zum aktuellen Standort in KM
/// </summary>
[NotMapped]
public double Distance { get; set; }
/// <summary>
/// Voller Name des Walkers
/// </summary>
[NotMapped]
public string FullName => $"{FirstName} {LastName}";
/// <summary>
/// Vorname + Nachname erster Buchstabe + Punkt, oder nur Vorname wenn kein Nachname
/// </summary>
[NotMapped]
public string FullNameShort => string.IsNullOrWhiteSpace(LastName) ? FirstName : $"{FirstName} {LastName[..1]}.";
#region Erweiterung Blockier- und Sperrinfo
/// <summary>
/// Hundebesitzer ist blockiert
/// </summary>
[NotMapped]
public bool Blocked { get; set; }
/// <summary>
/// Hundebesitzer ist gesperrt
/// </summary>
[NotMapped]
public bool Locked { get; set; }
/// <summary>
/// Hundebesitzer blockiert oder gesperrt?
/// </summary>
[NotMapped]
public bool BlockedOrLocked => Blocked || Locked;
#endregion
/// <summary>
/// Erstellt eine Instanz
/// </summary>
public DogWalkerInfo()
{
Contact = new ContactMin();
Address = new Address();
RatingStatistics = new RatingStatistics();
RatingStatisticsWalker = new RatingStatistics();
}
}
}