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 gehGassi.Domain.Base; using gehGassi.Domain.Common; using gehGassi.Domain.Dogs; using gehGassi.Domain.Ratings; using NetTopologySuite.Geometries; namespace gehGassi.Domain.Walks { /// /// Repräsentiert einen Walk /// public class Walk : SyncEntity, IAuditable { /// /// Art der Walk Anfrage /// [Required] public WalkType Type { get; set; } /// /// Welche Art von Service soll durchgeführt werden /// [Required] public WalkServiceType ServiceType { get; set; } /// /// Id des Walkers /// [Required] [MaxLength(128)] public string DogWalkerId { get; set; } /// /// Id des Hundebesitzers /// [Required] [MaxLength(128)] public string DogOwnerId { get; set; } /// /// Id der öffentlichen Anfrage, wenn über diese erstellt /// [MaxLength(128)] public string PublicWalkRequestId { get; set; } /// /// Jsonliste mit Id´s der Hunde die ausgewählt wurden /// public string DogsJson { get; set; } /// /// Anzahl der Hunde /// [Required] public int DogCount { get; set; } /// /// Startdatum des Walks mit Urhrzeit /// [Required] public DateTimeOffset Start { get; set; } /// /// Enddatum des Walks mit Uhrzeit /// [Required] public DateTimeOffset End { get; set; } /// /// Wo soll der Hunde abgeholt werden /// public Address PickupAddress { get; set; } /// /// Geo-Koordinaten der Abhol-Adresse /// public Point PickupLocation { get; set; } /// /// Wo soll der Hunde zurückgegeben werden werden /// public Address ReturnAddress { get; set; } /// /// Geo-Koordinaten der Rückgabe-Adresse /// public Point ReturnLocation { get; set; } /// /// Preis für den Walk / Das Sitting. Wird gesetzt und kann entweder fix sein (öffentliche Anfrage) oder errechnet /// public decimal Price { get; set; } /// /// Zusatzinfo für den Walk. Z.B. bei Susi klingeln /// [MaxLength(500)] public string Info { get; set; } /// /// Status eines Walks /// [Required] public WalkStatus Status { get; set; } /// /// Wann wurde der Walk / Sitting gestartet? /// public DateTimeOffset? Started { get; set; } /// /// Wann wurde der Walk / Sitting beendet? /// public DateTimeOffset? Completed { get; set; } /// /// Wann wurde der Walk / Sitting bestätigt? /// public DateTimeOffset? Confirmed { get; set; } /// /// Wann wurde der Walk / Sitting reklamiert? /// public DateTimeOffset? Complained { get; set; } /// /// Optional: Grund für die Reklamation /// [MaxLength(500)] public string ComplainReason { get; set; } #region Status Infos /// /// Optional: Grund für die Ablehnung /// [MaxLength(500)] public string DeclinedReason { get; set; } /// /// Optional: Grund für die Stornierung /// [MaxLength(500)] public string CancelledReason { get; set; } /// /// Wer hat eine Stornierung durchgeführt /// [Required] public CancellationSource CancelledBy { get; set; } /// /// Anmerkungen vom Walker nach dem Abschluss /// [MaxLength(500)] public string CompletedInfo { get; set; } /// /// Kotabsatz? /// [Required] public bool Defactation { get; set; } #endregion #region Payment /// /// Zahlungsstatus des Walks /// [Required] public PaymentStatus PaymentStatus { get; set; } /// /// Id des Gutscheins der verwendet wurde, wenn einer verwendet wurde /// [MaxLength(128)] public string? VoucherId { get; set; } /// /// Wert des Gutscheins - real verwendeter Wert /// public decimal VoucherAmmount { get; set; } #endregion /// /// Datum der Erstellung des Walks /// [Required] public DateTimeOffset Created { get; set; } public Walk() { PickupLocation = new Point(0, 0); ReturnLocation = new Point(0, 0); } #region IAuditable /// /// Gibt den eindeutigen Key für die Entität zurück; /// Hier als String gelöst, weil damit auch kombinierte Schlüssel möglich sind. /// /// Eindeutiger Key public string AuditKey() { return Id.ToString(); } /// /// Gibt den Objektnamen bzw. die Tabelle der Entität zurück /// /// Objektnamen public string AuditTable() { return "Walks"; } public AuditableOptions Options() { return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete; } #endregion } /// /// Repräsentiert einen Walk mit Namen und Objekten aufgelöst /// public class WalkWithNames : SyncEntityVw { /// /// Art der Walk Anfrage /// public WalkType Type { get; set; } /// /// Welche Art von Service soll durchgeführt werden /// public WalkServiceType ServiceType { get; set; } /// /// Id des Walkers /// public string DogWalkerId { get; set; } /// /// Name des DogWalkers /// public string DogWalkerName { get; set; } /// /// Foto des Dogwalkers /// public string DogWalkerPhoto { get; set; } /// /// Walker gesperrt /// public bool DogWalkerLocked { get; set; } /// /// Walker blockiert /// public bool DogWalkerBlocked { get; set; } /// /// Id des Hundebesitzers /// public string DogOwnerId { get; set; } /// /// Name des Hundebesitzers /// public string DogOwnerName { get; set; } /// /// Foto des Hundebesitzers /// public string DogOwnerPhoto { get; set; } /// /// Hundebesitzer gesperrt /// public bool DogOwnerLocked { get; set; } /// /// Hundebesitzer blockiert /// public bool DogOwnerBlocked { get; set; } /// /// Id der öffentlichen Anfrage, wenn über diese erstellt /// public string PublicWalkRequestId { get; set; } /// /// Jsonliste mit Id´s der Hunde die ausgewählt wurden /// public string DogsJson { get; set; } /// /// Liste der Hunde /// [NotMapped] public List Dogs { get; set; } /// /// Anzahl der Hunde /// public int DogCount { get; set; } /// /// Startdatum des Walks mit Urhrzeit /// public DateTimeOffset Start { get; set; } /// /// Enddatum des Walks mit Uhrzeit /// public DateTimeOffset End { get; set; } /// /// Abholadresse - Adresszeile 1 /// public string PickupAddress_AddressLine1 { get; set; } /// /// Abholadresse - Adresszeile 2 /// public string PickupAddress_AddressLine2 { get; set; } /// /// Abholadresse - Stadt / Ort /// public string PickupAddress_City { get; set; } /// /// Abholadresse - PLZ /// public string PickupAddress_Zip { get; set; } /// /// Abholadresse - Bundesland / Staat /// public string PickupAddress_State { get; set; } /// /// Abholadresse - ISO2 Ländercode /// public string PickupAddress_CountryCode { get; set; } /// /// Geo-Koordinaten der Abhol-Adresse /// public Point PickupLocation { get; set; } /// /// RückgabeAdresse - Adresszeile 1 /// public string ReturnAddress_AddressLine1 { get; set; } /// /// RückgabeAdresse - Adresszeile 2 /// public string ReturnAddress_AddressLine2 { get; set; } /// /// RückgabeAdresse - Stadt / Ort /// public string ReturnAddress_City { get; set; } /// /// RückgabeAdresse - PLZ /// public string ReturnAddress_Zip { get; set; } /// /// RückgabeAdresse - Bundesland / Staat /// public string ReturnAddress_State { get; set; } /// /// RückgabeAdresse - ISO2 Ländercode /// public string ReturnAddress_CountryCode { get; set; } /// /// Geo-Koordinaten der Rückgabe-Adresse /// public Point ReturnLocation { get; set; } /// /// Preis für den Walk / Das Sitting. Wird gesetzt und kann entweder fix sein (öffentliche Anfrage) oder errechnet /// public decimal Price { get; set; } /// /// Zusatzinfo für den Walk. Z.B. bei Susi klingeln /// public string Info { get; set; } /// /// Status eines Walks /// public WalkStatus Status { get; set; } /// /// Wann wurde der Walk / Sitting gestartet? /// public DateTimeOffset? Started { get; set; } /// /// Wann wurde der Walk / Sitting beendet? /// public DateTimeOffset? Completed { get; set; } /// /// Wann wurde der Walk / Sitting bestätigt? /// public DateTimeOffset? Confirmed { get; set; } /// /// Wann wurde der Walk / Sitting reklamiert? /// public DateTimeOffset? Complained { get; set; } /// /// Optional: Grund für die Reklamation /// public string ComplainReason { get; set; } #region Status Infos /// /// Optional: Grund für die Ablehnung /// public string DeclinedReason { get; set; } /// /// Optional: Grund für die Stornierung /// public string CancelledReason { get; set; } /// /// Wer hat eine Stornierung durchgeführt /// public CancellationSource CancelledBy { get; set; } /// /// Anmerkungen vom Walker nach dem Abschluss /// public string CompletedInfo { get; set; } /// /// Kotabsatz? /// public bool Defactation { get; set; } #endregion #region Payment /// /// Zahlungsstatus des Walks /// public PaymentStatus PaymentStatus { get; set; } /// /// Id des Gutscheins der verwendet wurde, wenn einer verwendet wurde /// public string? VoucherId { get; set; } /// /// Wert des Gutscheins - real verwendeter Wert /// public decimal VoucherAmmount { get; set; } #endregion /// /// Datum der Erstellung des Walks /// public DateTimeOffset Created { get; set; } } }