458 lines
15 KiB
C#
458 lines
15 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using gehGassi.Common;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace gehGassi.Web.Models
|
|
{
|
|
/// <summary>
|
|
/// Viewmodel für einen Kunden
|
|
/// </summary>
|
|
public class CustomerVm
|
|
{
|
|
/// <summary>
|
|
/// Id des Kunden
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
public long Id { get; set; }
|
|
|
|
/// <summary>
|
|
/// Spezial-ID
|
|
/// </summary>
|
|
public Guid? UniqueId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Typ des Kunden
|
|
/// </summary>
|
|
[Display(Name = "Customer_TypeId")]
|
|
public long? TypeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Branche des Kunden
|
|
/// </summary>
|
|
[Display(Name = "Customer_BranchId")]
|
|
public string BranchId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional: Liste der Branchen für eine Listung
|
|
/// </summary>
|
|
[Display(Name = "Customer_BranchesJson", Description = "Customer_BranchesJson_Desc")]
|
|
public string BranchesJson { get; set; }
|
|
|
|
/// <summary>
|
|
/// Kundennummer
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Number")]
|
|
public string Number { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name des Kunden
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[MaxLength(200, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Name")]
|
|
public string Name { get; set; }
|
|
|
|
/// <summary>
|
|
/// Handelt es sich um einen Firmenkunden?
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Display(Name = "Customer_IsCompany")]
|
|
public bool IsCompany { get; set; }
|
|
|
|
/// <summary>
|
|
/// UID Nummer
|
|
/// </summary>
|
|
[Remote("IsVatValid", "Common", AdditionalFields = "Address.CountryCode", ErrorMessage = "Err_Vat_Invalid", HttpMethod = "POST")]
|
|
//[RequiredIf("IsCompany", true, ErrorMessage = "Err_Required")]
|
|
[MaxLength(50, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Vat")]
|
|
public string Vat { get; set; }
|
|
|
|
/// <summary>
|
|
/// Anrede / Titel
|
|
/// </summary>
|
|
[MaxLength(50, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Title")]
|
|
public string Title { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optinaler Vorname der Kontaktperson
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_FirstName")]
|
|
public string FirstName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optinaler Nachname der Kontaktperson
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_LastName")]
|
|
public string LastName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Kontaktdaten
|
|
/// </summary>
|
|
public ContactEmailRequiredVm Contact { get; set; }
|
|
|
|
/// <summary>
|
|
/// Adressdaten
|
|
/// </summary>
|
|
public AddressRequiredVm Address { get; set; }
|
|
|
|
/// <summary>
|
|
/// Anmerkungen
|
|
/// </summary>
|
|
[MaxLength(1000, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Comment")]
|
|
public string Comment { get; set; }
|
|
|
|
/// <summary>
|
|
/// Sprachen die für einen Kunden verfügbar sind.
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[MaxLength(256, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Languages", Description = "Customer_Languages_Desc")]
|
|
public string Languages { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional - Logo des Unternehmens
|
|
/// </summary>
|
|
[MaxLength(500, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_Logo")]
|
|
public string Logo { get; set; }
|
|
|
|
#region finance
|
|
|
|
/// <summary>
|
|
/// Auf- oder Abschlag für eine Listung in Prozent
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Range(-100.0, 100.0, ErrorMessage = "Err_Range")]
|
|
[Display(Name = "Customer_MarkupListing", Description = "Customer_Markup_Desc")]
|
|
public decimal MarkupListing { get; set; }
|
|
|
|
/// <summary>
|
|
/// Auf- oder Abschlag für eine Werbung in Prozent
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Range(-100.0, 100.0, ErrorMessage = "Err_Range")]
|
|
[Display(Name = "Customer_MarkupAdvertisement", Description = "Customer_Markup_Desc")]
|
|
public decimal MarkupAdvertisement { get; set; }
|
|
|
|
/// <summary>
|
|
/// Auf- oder Abschlag für eine Pin-Werbung in Prozent
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Range(-100.0, 100.0, ErrorMessage = "Err_Range")]
|
|
[Display(Name = "Customer_MarkupPin", Description = "Customer_Markup_Desc")]
|
|
public decimal MarkupPin { get; set; }
|
|
|
|
/// <summary>
|
|
/// Auf- oder Abschlag für eine Banner-Werbung in Prozent
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Range(-100.0, 100.0, ErrorMessage = "Err_Range")]
|
|
[Display(Name = "Customer_MarkupBanner", Description = "Customer_Markup_Desc")]
|
|
public decimal MarkupBanner { get; set; }
|
|
|
|
/// <summary>
|
|
/// Zahlen auf Rechnung allgemein möglich?
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Display(Name = "Customer_PaymentOnInvoice", Description = "Customer_PaymentOnInvoice_Desc")]
|
|
public bool PaymentOnInvoice { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region MangoPay
|
|
|
|
/// <summary>
|
|
/// ID des AppUsers beim Payment-Provider erstellt
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayIdCreated")]
|
|
public bool MangopayIdCreated { get; set; }
|
|
|
|
/// <summary>
|
|
/// Offizieller Firmenname für MangoPay
|
|
/// </summary>
|
|
[MaxLength(256, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayCompanyName")]
|
|
public string MangopayCompanyName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Email Adresse für MangoPay
|
|
/// </summary>
|
|
[MaxLength(255, ErrorMessage = "Err_StringLength_Max")]
|
|
[EmailAddress(ErrorMessage = "Err_InvalidEmail")]
|
|
[Display(Name = "Customer_MangopayEmail")]
|
|
public string MangopayEmail { get; set; }
|
|
|
|
/// <summary>
|
|
/// Adressdaten
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayAddress")]
|
|
public AddressVm MangopayAddress { get; set; }
|
|
|
|
/// <summary>
|
|
/// Company registration number - Handelsregisternummer
|
|
/// </summary>
|
|
[MaxLength(50, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayRegistrationNumber")]
|
|
public string MangopayRegistrationNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// Vorname der Kontaktperson Mangopay
|
|
/// </summary>
|
|
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayContactFirstName")]
|
|
public string MangopayContactFirstName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nachname der Kontaktperson Mangopay
|
|
/// </summary>
|
|
[MaxLength(100, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayContactLastName")]
|
|
public string MangopayContactLastName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Email Adresse der Kontaktperson Mangopay
|
|
/// </summary>
|
|
[MaxLength(255, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayContactEmail")]
|
|
public string MangopayContactEmail { get; set; }
|
|
|
|
/// <summary>
|
|
/// Geburtsdatum der Kontaktperson Mangopay
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayContactBirthdate")]
|
|
public DateTimeOffset? MangopayContactBirthdate { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nationalität der Kontaktperson Mangopay ISO2
|
|
/// </summary>
|
|
[MaxLength(2, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayContactNationality")]
|
|
public string MangopayContactNationality { get; set; }
|
|
|
|
/// <summary>
|
|
/// Land Hauptwohnsitz ISO2
|
|
/// </summary>
|
|
[MaxLength(2, ErrorMessage = "Err_StringLength_Max")]
|
|
[Display(Name = "Customer_MangopayContactMainResidenceCode")]
|
|
public string MangopayContactMainResidenceCode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wurden die Datenschutzbedingungen des Paymentproviders akzeptiert
|
|
/// </summary>
|
|
[Required(ErrorMessage = "Err_Required")]
|
|
[Display(Name = "Customer_MangopayTermsAccepted")]
|
|
public bool MangopayTermsAccepted { get; set; }
|
|
|
|
/// <summary>
|
|
/// Wann wurden die Datenschutzbedingungen des Paymentproviders akzeptiert?
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayTermsAcceptedDate")]
|
|
public DateTimeOffset? MangopayTermsAcceptedDate { get; set; }
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Datum Erstellung
|
|
/// </summary>
|
|
[Display(Name = "Common_Created")]
|
|
public DateTimeOffset Created { get; set; }
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
public CustomerVm()
|
|
{
|
|
Address = new AddressRequiredVm();
|
|
Contact = new ContactEmailRequiredVm();
|
|
MangopayAddress = new AddressVm();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Viewmodel für das Bearbeiten & Anlegen eines Kunden
|
|
/// </summary>
|
|
public class CustomerCrudVm : CustomerVm, IValidatableObject
|
|
{
|
|
/// <summary>
|
|
/// Typ des Kunden als Name
|
|
/// </summary>
|
|
public string TypeName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Branche - Name
|
|
/// </summary>
|
|
public string BranchName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Land-Name
|
|
/// </summary>
|
|
public string CountryName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Bundesland-Name
|
|
/// </summary>
|
|
public string StateName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Land-Name für Mangopay
|
|
/// </summary>
|
|
public string MangopayCountryName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Bundesland-Name für Mangopay
|
|
/// </summary>
|
|
public string MangopayStateName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nationalität-Name für Mangopay
|
|
/// </summary>
|
|
public string MangopayContactNationalityName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Hauptwohnsitz-Name für Mangopay
|
|
/// </summary>
|
|
public string MangopayContactMainResidenceCodeName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Stellt fest ob das Model gültig ist.
|
|
/// </summary>
|
|
/// <returns>
|
|
/// Liste von Fehlermeldungen, wenn Validierungs-Fehler auftreten.
|
|
/// </returns>
|
|
/// <param name="validationContext">Validierungs-Kontext</param>
|
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
|
{
|
|
//Prüfen ob eine Zahlungsmöglichkeit aktiviert wurde
|
|
if (IsCompany && Address != null && !string.IsNullOrWhiteSpace(Address.CountryCode))
|
|
{
|
|
var vatValidationSettings = validationContext.GetService(typeof(IOptions<VatValidationSettings>)) as IOptions<VatValidationSettings>;
|
|
if (vatValidationSettings.Value.Countries.Contains(Address.CountryCode.ToUpper()))
|
|
{
|
|
if (string.IsNullOrWhiteSpace(Vat))
|
|
{
|
|
var stringLocalizer = validationContext.GetService(typeof(IStringLocalizer<CustomerCrudVm>)) as IStringLocalizer<CustomerCrudVm>;
|
|
yield return new ValidationResult(stringLocalizer["Err_Vat_Missing"], new List<string> { "Vat" });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Viewmodel für einen Kunden Listendarstellung
|
|
/// </summary>
|
|
public class CustomerListVm
|
|
{
|
|
/// <summary>
|
|
/// Id des Kunden
|
|
/// </summary>
|
|
public long Id { get; set; }
|
|
|
|
/// <summary>
|
|
/// Spezial-ID
|
|
/// </summary>
|
|
public Guid? UniqueId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Typ des Kunden
|
|
/// </summary>
|
|
[Display(Name = "Customer_TypeId")]
|
|
public long? TypeId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Typ des Kunden als Name
|
|
/// </summary>
|
|
[Display(Name = "Customer_TypeId")]
|
|
public string TypeName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Branche des Kunden
|
|
/// </summary>
|
|
[Display(Name = "Customer_BranchId")]
|
|
public string BranchId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Branche des Kunden als Name
|
|
/// </summary>
|
|
[Display(Name = "Customer_BranchId")]
|
|
public string BranchName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional: Liste der Branchen für eine Listung
|
|
/// </summary>
|
|
public string BranchesJson { get; set; }
|
|
|
|
/// <summary>
|
|
/// Kundennummer
|
|
/// </summary>
|
|
[Display(Name = "Customer_Number")]
|
|
public string Number { get; set; }
|
|
|
|
/// <summary>
|
|
/// Name des Kunden
|
|
/// </summary>
|
|
[Display(Name = "Customer_Name", Description = "Customer_Name_Desc")]
|
|
public string Name { get; set; }
|
|
|
|
/// <summary>
|
|
/// UID Nummer
|
|
/// </summary>
|
|
[Display(Name = "Customer_Vat")]
|
|
public string Vat { get; set; }
|
|
|
|
/// <summary>
|
|
/// Land der Adresse
|
|
/// </summary>
|
|
public string CountryCode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Sprachen die für einen Kunden verfügbar sind.
|
|
/// </summary>
|
|
[Display(Name = "Customer_Languages")]
|
|
public string Languages { get; set; }
|
|
|
|
/// <summary>
|
|
/// Optional - Logo des Unternehmens
|
|
/// </summary>
|
|
[Display(Name = "Customer_Logo")]
|
|
public string Logo { get; set; }
|
|
|
|
/// <summary>
|
|
/// Zahlen auf Rechnung allgemein möglich?
|
|
/// </summary>
|
|
[Display(Name = "Customer_PaymentOnInvoice")]
|
|
public bool PaymentOnInvoice { get; set; }
|
|
|
|
/// <summary>
|
|
/// ID des AppUsers beim Payment-Provider erstellt
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayIdCreated")]
|
|
public bool MangopayIdCreated { get; set; }
|
|
|
|
/// <summary>
|
|
/// ID des AppUsers beim Payment-Provider
|
|
/// </summary>
|
|
[Display(Name = "Customer_MangopayPaymentId")]
|
|
public string MangopayPaymentId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Datum Erstellung
|
|
/// </summary>
|
|
[Display(Name = "Common_Created")]
|
|
public DateTimeOffset Created { get; set; }
|
|
}
|
|
}
|