using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Domain.Common; namespace gehGassi.Domain.Customers { /// /// Repräsentiert einen Kunden /// public class Customer : IAuditable { /// /// Id des Kunden /// [Key] [Required] public long Id { get; set; } /// /// Spezial-ID /// public Guid? UniqueId { get; set; } /// /// Typ des Kunden /// public long? TypeId { get; set; } /// /// Branche /// [MaxLength(128)] public string BranchId { get; set; } /// /// Optional: Liste der Branchen für eine Listung /// public string BranchesJson { get; set; } /// /// Kundennummer /// [Required] [MaxLength(100)] public string Number { get; set; } /// /// Name des Kunden /// [Required] [MaxLength(200)] public string Name { get; set; } /// /// Handelt es sich um einen Firmenkunden? /// [Required] public bool IsCompany { get; set; } /// /// UID Nummer /// [MaxLength(50)] public string Vat { get; set; } /// /// Anrede / titel /// [MaxLength(50)] public string Title { get; set; } /// /// Optinaler Vorname der Kontaktperson /// [MaxLength(100)] public string FirstName { get; set; } /// /// Optinaler Nachname der Kontaktperson /// [MaxLength(100)] public string LastName { get; set; } /// /// Kontaktdaten /// public Contact Contact { get; set; } /// /// Adressdaten /// public Address Address { get; set; } /// /// Anmerkungen /// [MaxLength(1000)] public string Comment { get; set; } /// /// Sprachen die für einen Kunden verfügbar sind. /// [Required] [MaxLength(256)] public string Languages { get; set; } /// /// Optional - Logo des Unternehmens /// [MaxLength(500)] public string Logo { get; set; } #region finance /// /// Auf- oder Abschlag für eine Listung in Prozent /// public decimal MarkupListing { get; set; } /// /// Auf- oder Abschlag für eine Werbung in Prozent /// public decimal MarkupAdvertisement { get; set; } /// /// Auf- oder Abschlag für eine Pin-Werbung in Prozent /// public decimal MarkupPin { get; set; } /// /// Auf- oder Abschlag für eine Banner-Werbung in Prozent /// public decimal MarkupBanner { get; set; } /// /// Zahlen auf Rechnung allgemein möglich? /// [Required] public bool PaymentOnInvoice { get; set; } #endregion /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } #region MangoPay /// /// ID des AppUsers beim Payment-Provider erstellt /// public bool MangopayIdCreated { get; set; } /// /// ID des AppUsers beim Payment-Provider /// [MaxLength(255)] public string MangopayPaymentId { get; set; } /// /// Offizieller Firmenname für MangoPay /// [MaxLength(256)] public string MangopayCompanyName { get; set; } /// /// Email für Mangopay /// [MaxLength(255)] public string MangopayEmail { get; set; } /// /// Adressdaten /// public Address MangopayAddress { get; set; } /// /// Company registration number - Handelsregisternummer /// [MaxLength(50)] public string MangopayRegistrationNumber { get; set; } /// /// Vorname der Kontaktperson Mangopay /// [MaxLength(100)] public string MangopayContactFirstName { get; set; } /// /// Nachname der Kontaktperson Mangopay /// [MaxLength(100)] public string MangopayContactLastName { get; set; } /// /// Email Adresse der Kontaktperson Mangopay /// [MaxLength(255)] public string MangopayContactEmail { get; set; } /// /// Geburtsdatum der Kontaktperson Mangopay /// public DateTimeOffset? MangopayContactBirthdate { get; set; } /// /// Nationalität der Kontaktperson Mangopay ISO2 /// [MaxLength(2)] public string MangopayContactNationality { get; set; } /// /// Land Hauptwohnsitz ISO2 /// [MaxLength(2)] public string MangopayContactMainResidenceCode { get; set; } /// /// Wurden die Datenschutzbedingungen des Paymentproviders akzeptiert /// [Required] public bool MangopayTermsAccepted { get; set; } /// /// Wann wurden die Datenschutzbedingungen des Paymentproviders akzeptiert? /// public DateTimeOffset? MangopayTermsAcceptedDate { get; set; } #endregion /// /// Gibt zurück ob der Kunde alle notwendigen Informationen für den PaymentProvider beinhaltet /// /// true wenn alle notwendigen Daten vorhanden sind, false sonst public bool HasDataForMangopay() { if (string.IsNullOrWhiteSpace(MangopayCompanyName)) return false; if (string.IsNullOrWhiteSpace(MangopayEmail)) return false; if (MangopayAddress == null) return false; if (string.IsNullOrWhiteSpace(MangopayAddress.AddressLine1)) return false; if (string.IsNullOrWhiteSpace(MangopayAddress.Zip)) return false; if (string.IsNullOrWhiteSpace(MangopayAddress.City)) return false; if (string.IsNullOrWhiteSpace(MangopayAddress.CountryCode)) return false; if (string.IsNullOrWhiteSpace(MangopayRegistrationNumber)) return false; if (string.IsNullOrWhiteSpace(MangopayContactFirstName)) return false; if (string.IsNullOrWhiteSpace(MangopayContactLastName)) return false; if (string.IsNullOrWhiteSpace(MangopayContactEmail)) return false; if (string.IsNullOrWhiteSpace(MangopayContactNationality)) return false; if (string.IsNullOrWhiteSpace(MangopayContactMainResidenceCode)) return false; if (!MangopayContactBirthdate.HasValue) return false; return true; } /// /// Gibt zurück ob es an den Daten für Mangopay Änderungen gab /// /// Firmenname /// Email der Firma /// Strasse /// PLZ /// Ort /// Land /// Registrierungsnummer /// Vorname /// Nachname /// Email Kontaktperson /// Geburtsdatum /// Nationalität /// Hauptwohnsitz /// AGB akzeptiert /// true wenn Änderungen vorhanden sind, false sonst public bool HasChangesForMangopay(string companyName, string email, string addressLine1, string zip, string ciy, string countryCode, string registrationNumber, string firstName, string lastName, string contactEmail, DateTimeOffset? birthDate, string nationality, string residence, bool termsAccepted) { if(MangopayCompanyName != companyName) return true; if (MangopayEmail != email) return true; if(MangopayAddress?.AddressLine1 != addressLine1) return true; if(MangopayAddress?.Zip != zip) return true; if(MangopayAddress?.City != ciy) return true; if(MangopayAddress?.CountryCode != countryCode) return true; if(MangopayRegistrationNumber != registrationNumber) return true; if(MangopayContactFirstName != firstName) return true; if(MangopayContactLastName != lastName) return true; if(MangopayContactEmail != contactEmail) return true; if(MangopayContactBirthdate != birthDate) return true; if(MangopayContactNationality != nationality) return true; if(MangopayContactMainResidenceCode != residence) return true; if(MangopayTermsAccepted != termsAccepted) return true; return false; } #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 "Customers"; } public AuditableOptions Options() { return AuditableOptions.Create | AuditableOptions.Edit | AuditableOptions.Delete; } #endregion } /// /// Repräsentiert einen Kunden mit aufgelösten Namen für View /// public class CustomerWithNames { /// /// Id des Kunden /// public long Id { get; set; } /// /// Spezial-ID /// public Guid? UniqueId { get; set; } /// /// Typ des Kunden /// public long? TypeId { get; set; } /// /// Name des Kunden-Typen /// public string TypeName { get; set; } /// /// Branche /// public string BranchId { get; set; } /// /// Name der Branche /// public string BranchName { get; set; } /// /// Optional: Liste der Branchen für eine Listung /// public string BranchesJson { get; set; } /// /// Kundennummer /// public string Number { get; set; } /// /// Name des Kunden /// public string Name { get; set; } /// /// Handelt es sich um einen Firmenkunden? /// public bool IsCompany { get; set; } /// /// UID Nummer /// public string Vat { get; set; } /// /// Anrede / titel /// public string Title { get; set; } /// /// Optinaler Vorname der Kontaktperson /// public string FirstName { get; set; } /// /// Optinaler Nachname der Kontaktperson /// public string LastName { get; set; } /// /// Land der Adresse /// public string CountryCode { get; set; } /// /// Anmerkungen /// public string Comment { get; set; } /// /// Sprachen die für einen Kunden verfügbar sind. /// public string Languages { get; set; } /// /// Optional - Logo des Unternehmens /// public string Logo { get; set; } #region finance /// /// Auf- oder Abschlag für eine Listung in Prozent /// public decimal MarkupListing { get; set; } /// /// Auf- oder Abschlag für eine Werbung in Prozent /// public decimal MarkupAdvertisement { get; set; } /// /// Auf- oder Abschlag für eine Pin-Werbung in Prozent /// public decimal MarkupPin { get; set; } /// /// Auf- oder Abschlag für eine Banner-Werbung in Prozent /// public decimal MarkupBanner { get; set; } /// /// Zahlen auf Rechnung allgemein möglich? /// public bool PaymentOnInvoice { get; set; } #endregion /// /// ID des AppUsers beim Payment-Provider erstellt /// public bool MangopayIdCreated { get; set; } /// /// ID des AppUsers beim Payment-Provider /// public string MangopayPaymentId { get; set; } /// /// Datum der Erstellung /// public DateTimeOffset Created { get; set; } } }