Files
BeWoPlaner/BeWo/ViewModel/PersonVM.cs

805 lines
26 KiB
C#
Raw Normal View History

2016-06-27 01:45:38 +02:00
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using BeWo.Core;
using BeWo.Validation;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace BeWo.ViewModel
{
public class PersonVM : AbstractDCMapperVM<PersonDC>
{
public static string PropertyName_DateOfBirth = "DateOfBirth";
public static string PropertyName_FirstName = "FirstName";
public static string PropertyName_Function = "Function";
public static string PropertyName_InvoiceAddressPostalCode = "InvoiceAddressPostalCode";
public static string PropertyName_InvoiceAddressStreet = "InvoiceAddressStreet";
public static string PropertyName_InvoiceAddressTown = "InvoiceAddressTown";
public static string PropertyName_IsArchived = "IsArchived";
public static string PropertyName_IsFemale = "IsFemale";
public static string PropertyName_IsMale = "IsMale";
public static string PropertyName_LastName = "LastName";
public static string PropertyName_NewOrganisationRelation = "NewOrganisationRelation";
public static string PropertyName_Notice = "Notice";
public static string PropertyName_OrganisationRelations = "OrganisationRelations";
public static string PropertyName_PostalCode = "PostalCode";
public static string PropertyName_PrivateEMail = "EMail";
public static string PropertyName_PrivateFax = "Fax";
public static string PropertyName_PrivateHomepage = "Homepage";
public static string PropertyName_PrivateMobilePhone = "PrivateMobilePhone";
public static string PropertyName_PrivatePhone = "Phone";
public static string PropertyName_Sex = "Sex";
public static string PropertyName_AddressLine1 = "AddressLine1";
public static string PropertyName_Street = "Street";
public static string PropertyName_Title = "Title";
public static string PropertyName_Town = "Town";
public static string PropertyName_VarFields = "VarFields";
public static string PropertyName_IsMigrant = "IsMigrant";
public static string PropertyName_Nationalitaet = "Nationalitaet";
2016-06-27 01:45:38 +02:00
private DateTime? _DateOfBirth;
private string _FirstName;
private ValueListEntryDC _Function;
private ObservableSortCollection<ValueListEntryDC> _Functions;
private string _InvoiceAddressPostalCode;
private string _InvoiceAddressStreet;
private string _InvoiceAddressTown;
private bool _IsArchived;
private bool _IsFemale;
private bool _IsMale;
private string _LastName;
private PersonOrganisationRelationVM _NewOrganisationRelation;
private string _Notice;
private PersonOrganisationRelationListVM _OrganisationRelations;
private string _PostalCode;
private string _PrivateEMail;
private string _PrivateFax;
private string _PrivateHomepage;
private string _PrivateMobilePhone;
private string _PrivatePhone;
private string _AddressLine1;
private string _Street;
private ValueListEntryDC _Title;
private ObservableSortCollection<ValueListEntryDC> _Titles;
private string _Town;
private VarFieldListVM _VarFields;
private ObservableSortCollection<ValueListEntryDC> _RoleInOrganisations;
private bool _IsMigrant;
private ValueListEntryDC _Nationalitaet;
private ObservableSortCollection<ValueListEntryDC> _Nationalitaeten;
public PersonVM(PersonDC pDataContract, List<ValueListEntryDC> pPossibleTitles, List<ValueListEntryDC> pPossibleFunctions, List<ValueListEntryDC> pPossibleRoleInOrganisation, List<ValueListEntryDC> pPossibleNationalitaeten)
: base(pDataContract, pDataContract.PersonOid == null)
2016-06-27 01:45:38 +02:00
{
this._Titles = new ObservableSortCollection<ValueListEntryDC>(pPossibleTitles, Comparer.ValueListEntryDCComparer);
this._Functions = new ObservableSortCollection<ValueListEntryDC>(pPossibleFunctions, Comparer.ValueListEntryDCComparer);
_RoleInOrganisations = new ObservableSortCollection<ValueListEntryDC>(pPossibleRoleInOrganisation, Comparer.ValueListEntryDCComparer);
_Nationalitaeten = new ObservableSortCollection<ValueListEntryDC>(pPossibleNationalitaeten, Comparer.ValueListEntryDCComparer);
2016-06-27 01:45:38 +02:00
}
public DateTime? DateOfBirth
{
get { return this._DateOfBirth; }
set
{
if (this.AreDifferent(this._DateOfBirth, value))
{
this._DateOfBirth = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.DateOfBirth, value), PropertyName_DateOfBirth);
this.FirePropertyChanged(PropertyName_DateOfBirth);
}
}
}
public string FirstName
{
get { return this._FirstName; }
set
{
if (this.AreDifferent(this._FirstName, value))
{
this._FirstName = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.FirstName, value), PropertyName_FirstName);
this.FirePropertyChanged(PropertyName_FirstName);
}
}
}
public ValueListEntryDC Function
{
get { return this._Function; }
set
{
if (this.AreDifferent(this._Function, value))
{
this._Function = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Function, value), PropertyName_Function);
this.FirePropertyChanged(PropertyName_Function);
}
}
}
public ObservableSortCollection<ValueListEntryDC> Functions
{
get
{
if (this._Functions == null)
{
this._Functions = new ObservableSortCollection<ValueListEntryDC>();
}
return this._Functions;
}
}
public string InvoiceAddressPostalCode
{
get { return this._InvoiceAddressPostalCode; }
set
{
if (this.AreDifferent(this._InvoiceAddressPostalCode, value))
{
this._InvoiceAddressPostalCode = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.InvoiceAddressPostalCode, value), PropertyName_InvoiceAddressPostalCode);
this.FirePropertyChanged(PropertyName_InvoiceAddressPostalCode);
}
}
}
public string InvoiceAddressStreet
{
get { return this._InvoiceAddressStreet; }
set
{
if (this.AreDifferent(this._InvoiceAddressStreet, value))
{
this._InvoiceAddressStreet = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.InvoiceAddressStreet, value), PropertyName_InvoiceAddressStreet);
this.FirePropertyChanged(PropertyName_InvoiceAddressStreet);
}
}
}
public string InvoiceAddressTown
{
get { return this._InvoiceAddressTown; }
set
{
if (this.AreDifferent(this._InvoiceAddressTown, value))
{
this._InvoiceAddressTown = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.InvoiceAddressTown, value), PropertyName_InvoiceAddressTown);
this.FirePropertyChanged(PropertyName_InvoiceAddressTown);
}
}
}
public bool IsArchived
{
get { return this._IsArchived; }
set
{
if (this.AreDifferent(this._IsArchived, value))
{
this._IsArchived = value;
this.StoreDirtyInformation(
(value && this.DataContract.ActivationType == ActivationTypeId.Active) || (!value && this.DataContract.ActivationType == ActivationTypeId.Archived), PropertyName_IsArchived);
this.FirePropertyChanged(PropertyName_IsArchived);
}
}
}
public override bool IsDirty
{
get
{
//return base.IsDirty || (this._VarFields != null && this._VarFields.IsDirty);
if (Utils.IsAnyNull(_OrganisationRelations, _VarFields))
{
return false;
}
return base.IsDirty || this._OrganisationRelations.IsDirty || this._VarFields.IsDirty;
}
}
public bool IsFemale
{
get { return this._IsFemale; }
set
{
if (this._IsFemale != value)
{
this._IsFemale = value;
this._IsMale = !value;
this.StoreDirtyInformation((this.DataContract.Sex == Sex.Female) != value, "sex");
this.FirePropertyChanged(PropertyName_IsFemale);
this.FirePropertyChanged(PropertyName_IsMale);
}
}
}
public bool IsMale
{
get { return this._IsMale; }
set
{
if (this._IsMale != value)
{
this._IsMale = value;
this._IsFemale = !value;
this.StoreDirtyInformation((this.DataContract.Sex == Sex.Male) != value, "sex");
this.FirePropertyChanged(PropertyName_IsFemale);
this.FirePropertyChanged(PropertyName_IsMale);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string LastName
{
get { return this._LastName; }
set
{
if (this.AreDifferent(this._LastName, value))
{
this._LastName = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.LastName, value), PropertyName_LastName);
this.FirePropertyChanged(PropertyName_LastName);
}
}
}
//public PersonOrganisationRelationVM NewOrganisationRelation
//{
// get { return this._NewOrganisationRelation; }
// set
// {
// if (this.AreDifferent(this._NewOrganisationRelation, value))
// {
// this._NewOrganisationRelation = value;
// this.FirePropertyChanged(PropertyName_NewOrganisationRelation);
// }
// }
//}
public string Notice
{
get { return this._Notice; }
set
{
if (this.AreDifferent(this._Notice, value))
{
this._Notice = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.PersonNotice, value), PropertyName_Notice);
this.FirePropertyChanged(PropertyName_Notice);
}
}
}
public PersonOrganisationRelationListVM OrganisationRelations
{
get { return this._OrganisationRelations; }
set
{
this._OrganisationRelations = value;
this.FirePropertyChanged(PropertyName_OrganisationRelations);
}
}
public string PostalCode
{
get { return this._PostalCode; }
set
{
if (this.AreDifferent(this._PostalCode, value))
{
this._PostalCode = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.PostalCode, value), PropertyName_PostalCode);
this.FirePropertyChanged(PropertyName_PostalCode);
}
}
}
public string PrivateEMail
{
get { return this._PrivateEMail; }
set
{
if (this.AreDifferent(this._PrivateEMail, value))
{
this._PrivateEMail = value;
this.StoreDirtyInformation(
this.DataContract.ContactInformations.Where(con => con.ContactType == ContactType.private_Mail && con.ContactValue == value).SingleOrDefault() == null,
PropertyName_PrivateEMail);
this.FirePropertyChanged(PropertyName_PrivateEMail);
}
}
}
public string PrivateFax
{
get { return this._PrivateFax; }
set
{
if (this.AreDifferent(this._PrivateFax, value))
{
this._PrivateFax = value;
this.StoreDirtyInformation(
this.DataContract.ContactInformations.Where(con => con.ContactType == ContactType.private_Fax && con.ContactValue == value).SingleOrDefault() == null, PropertyName_PrivateFax);
this.FirePropertyChanged(PropertyName_PrivateFax);
}
}
}
public string PrivateHomepage
{
get { return this._PrivateHomepage; }
set
{
if (this.AreDifferent(this._PrivateHomepage, value))
{
this._PrivateHomepage = value;
this.StoreDirtyInformation(
this.DataContract.ContactInformations.Where(con => con.ContactType == ContactType.private_Homepage && con.ContactValue == value).SingleOrDefault() == null, PropertyName_PrivateHomepage);
this.FirePropertyChanged(PropertyName_PrivateHomepage);
}
}
}
public string PrivateMobilePhone
{
get { return this._PrivateMobilePhone; }
set
{
if (this.AreDifferent(this._PrivateMobilePhone, value))
{
this._PrivateMobilePhone = value;
this.StoreDirtyInformation(
this.DataContract.ContactInformations.Where(con => con.ContactType == ContactType.private_MobilePhone && con.ContactValue == value).SingleOrDefault() == null,
PropertyName_PrivateMobilePhone);
this.FirePropertyChanged(PropertyName_PrivateMobilePhone);
}
}
}
public string PrivatePhone
{
get { return this._PrivatePhone; }
set
{
if (this.AreDifferent(this._PrivatePhone, value))
{
this._PrivatePhone = value;
this.StoreDirtyInformation(
this.DataContract.ContactInformations.Where(con => con.ContactType == ContactType.private_Phone && con.ContactValue == value).SingleOrDefault() == null,
PropertyName_PrivatePhone);
this.FirePropertyChanged(PropertyName_PrivatePhone);
}
}
}
public string AddressLine1
{
get { return this._AddressLine1; }
set
{
if (this.AreDifferent(this._AddressLine1, value))
{
this._AddressLine1 = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AddressLine1, value), PropertyName_AddressLine1);
this.FirePropertyChanged(PropertyName_AddressLine1);
}
}
}
public string Street
{
get { return this._Street; }
set
{
if (this.AreDifferent(this._Street, value))
{
this._Street = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Street, value), PropertyName_Street);
this.FirePropertyChanged(PropertyName_Street);
}
}
}
public ValueListEntryDC Title
{
get { return this._Title; }
set
{
if (this.AreDifferent(this._Title, value))
{
this._Title = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Title, value), PropertyName_Title);
this.FirePropertyChanged(PropertyName_Title);
}
}
}
public ObservableSortCollection<ValueListEntryDC> Titles
{
get
{
if (this._Titles == null)
{
this._Titles = new ObservableSortCollection<ValueListEntryDC>();
}
return this._Titles;
}
}
public ObservableSortCollection<ValueListEntryDC> RoleInOrganisations
{
get
{
if (this._RoleInOrganisations == null)
{
this._RoleInOrganisations = new ObservableSortCollection<ValueListEntryDC>();
}
return this._RoleInOrganisations;
}
}
2016-06-27 01:45:38 +02:00
public string Town
{
get { return this._Town; }
set
{
if (this.AreDifferent(this._Town, value))
{
this._Town = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Town, value), PropertyName_Town);
this.FirePropertyChanged(PropertyName_Town);
}
}
}
public VarFieldListVM VarFields
{
get { return this._VarFields; }
set
{
if (this.AreDifferent(this._VarFields, value))
{
this._VarFields = value;
this.FirePropertyChanged(PropertyName_VarFields);
}
}
}
public bool IsMigrant
{
get { return this._IsMigrant; }
set
{
if (this.AreDifferent(this._IsMigrant, value))
{
this._IsMigrant = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsMigrant, value), PropertyName_IsMigrant);
this.FirePropertyChanged(PropertyName_IsMigrant);
}
}
}
public ValueListEntryDC Nationalitaet
{
get { return this._Nationalitaet; }
set
{
if (this.AreDifferent(this._Nationalitaet, value))
{
this._Nationalitaet = value;
this.StoreDirtyInformation(this.AreDifferent(DataContract.Nationalitaet, value), PropertyName_Nationalitaet);
this.FirePropertyChanged(PropertyName_Nationalitaet);
}
}
}
public ObservableSortCollection<ValueListEntryDC> Nationalitaeten
{
get
{
if (_Nationalitaeten == null)
{
this._Nationalitaeten = new ObservableSortCollection<ValueListEntryDC>();
}
return this._Nationalitaeten;
}
}
2016-06-27 01:45:38 +02:00
protected override void InitByDataContract(PersonDC pDataContract)
{
this._VarFields = new VarFieldListVM(pDataContract.VarFields);
if (!this.IsNew)
{
this._DateOfBirth = pDataContract.DateOfBirth;
this._FirstName = pDataContract.FirstName;
this._LastName = pDataContract.LastName;
this._PostalCode = pDataContract.PostalCode;
this._Street = pDataContract.Street;
this._AddressLine1 = pDataContract.AddressLine1;
this._Town = pDataContract.Town;
this._InvoiceAddressPostalCode = pDataContract.InvoiceAddressPostalCode;
this._InvoiceAddressStreet = pDataContract.InvoiceAddressStreet;
this._InvoiceAddressTown = pDataContract.InvoiceAddressTown;
this._Notice = pDataContract.PersonNotice;
this._IsArchived = pDataContract.ActivationType == ActivationTypeId.Archived;
this._IsMale = pDataContract.Sex == Sex.Male;
this._IsFemale = pDataContract.Sex == Sex.Female;
this._Title = pDataContract.Title;
this._Function = pDataContract.Function;
_IsMigrant = pDataContract.IsMigrant;
_Nationalitaet = pDataContract.Nationalitaet;
2016-06-27 01:45:38 +02:00
foreach (ContactDC iContactDC in pDataContract.ContactInformations)
{
if (iContactDC.ContactType == ContactType.private_Mail)
{
this._PrivateEMail = iContactDC.ContactValue;
}
if (iContactDC.ContactType == ContactType.private_Fax)
{
this._PrivateFax = iContactDC.ContactValue;
}
if (iContactDC.ContactType == ContactType.private_Homepage)
{
this._PrivateHomepage = iContactDC.ContactValue;
}
if (iContactDC.ContactType == ContactType.private_Phone)
{
this._PrivatePhone = iContactDC.ContactValue;
}
if (iContactDC.ContactType == ContactType.private_MobilePhone)
{
this._PrivateMobilePhone = iContactDC.ContactValue;
}
}
//foreach (Organisation2PersonDC iOrganisationRel in pDataContract.OrganisationRelations)
//{
// this.OrganisationRelations.Add(new PersonOrganisationRelationVM(iOrganisationRel));
//}
}
OrganisationRelations = new PersonOrganisationRelationListVM(pDataContract.OrganisationRelations ??
(pDataContract.OrganisationRelations = new List<Organisation2PersonDC>()));
//this.OrganisationRelations.ListChanged +=
// (s, e) =>
// this.StoreDirtyInformation(!this._OrganisationRelations.Select(vm => vm.DataContract).ContainsSameItemsAs(pDataContract.OrganisationRelations), PropertyName_OrganisationRelations);
}
protected override PersonDC MapToDataContract(PersonDC pDataContract, bool doCommit)
{
pDataContract.DateOfBirth = this._DateOfBirth;
pDataContract.FirstName = this._FirstName;
pDataContract.LastName = this._LastName;
pDataContract.PostalCode = this._PostalCode;
pDataContract.Street = this._Street;
pDataContract.AddressLine1 = this._AddressLine1;
pDataContract.Town = this._Town;
pDataContract.InvoiceAddressStreet = this._InvoiceAddressStreet;
pDataContract.InvoiceAddressTown = this._InvoiceAddressTown;
pDataContract.InvoiceAddressPostalCode = this._InvoiceAddressPostalCode;
pDataContract.ActivationType = this._IsArchived ? ActivationTypeId.Archived : ActivationTypeId.Active;
pDataContract.PersonNotice = this._Notice;
if (this._VarFields != null)
{
pDataContract.VarFields = this._VarFields.CopyToDCList(doCommit);
}
this.CommitContact(this._PrivateMobilePhone, ContactType.private_MobilePhone);
this.CommitContact(this._PrivatePhone, ContactType.private_Phone);
this.CommitContact(this._PrivateFax, ContactType.private_Fax);
this.CommitContact(this._PrivateHomepage, ContactType.private_Homepage);
this.CommitContact(this._PrivateEMail, ContactType.private_Mail);
if (this._IsMale)
pDataContract.Sex = Sex.Male;
if (this._IsFemale)
pDataContract.Sex = Sex.Female;
//List<Organisation2PersonDC> lOrganisationRel = new List<Organisation2PersonDC>();
//foreach (PersonOrganisationRelationVM iRelVM in this._OrganisationRelations)
//{
// lOrganisationRel.Add(iRelVM.CommitToDataContract());
//}
//pDataContract.OrganisationRelations = lOrganisationRel;
pDataContract.OrganisationRelations = this._OrganisationRelations.CopyToDCList(doCommit);
pDataContract.Title = this._Title;
pDataContract.Function = this._Function;
2016-08-26 11:36:27 +02:00
pDataContract.Type = PersonType.Others;
pDataContract.IsMigrant = _IsMigrant;
pDataContract.Nationalitaet = _Nationalitaet;
2016-06-27 01:45:38 +02:00
return pDataContract;
}
private void CommitContact(string pValue, ContactType pContactType)
{
List<ContactDC> lOldContactDCs;
if (this.DataContract.ContactInformations != null)
{
lOldContactDCs = this.DataContract.ContactInformations.ToList();
}
else
{
lOldContactDCs = new List<ContactDC>();
}
ContactDC lContactDC = lOldContactDCs.SingleOrDefault(con => con.ContactType == pContactType);
if (string.IsNullOrEmpty(pValue) && lContactDC != null)
{
lOldContactDCs.Remove(lContactDC);
}
else if (!string.IsNullOrEmpty(pValue))
{
if (lContactDC == null)
{
lContactDC = new ContactDC
{
ContactType = pContactType
};
lOldContactDCs.Add(lContactDC);
}
lContactDC.ContactValue = pValue;
}
this.DataContract.ContactInformations = lOldContactDCs;
}
}
}