using BeWo.Data.Access;
using BeWo.Data.Entities;

using BS.Shared.DataContracts;

namespace BeWo.Service.DCEntityMapper
{
	public class MedikamentenverordnungDC_Medikamentenverordnung : AbstractIDCEntityMapper<Medikamentenverordnung, MedikamentenverordnungDC>
	{
		public override MedikamentenverordnungDC MergeWithDC(Medikamentenverordnung pEntity, MedikamentenverordnungDC pDataContract)
		{
			pDataContract.MedikamentenverordnungOid = pEntity.Oid;
			pDataContract.MedikamentenverordnungVersion = pEntity.Version;
			pDataContract.Morgens = pEntity.Morgens;
			pDataContract.Mittags = pEntity.Mittags;
			pDataContract.Abends = pEntity.Abends;
			pDataContract.Nachts = pEntity.Nachts;
			pDataContract.DepotErsterTag = pEntity.DepotErsterTag;
			pDataContract.DepotNaechsterTag = pEntity.DepotNaechsterTag;
			pDataContract.DepotMenge = pEntity.DepotMenge;
			pDataContract.DepotRhythmus = MapperFactory.DepotRhythmusDC_DepotRhythmus.MapToNewDC(pEntity.DepotRhythmus);
			pDataContract.MedArt = MapperFactory.MedArtDC_MedArt.MapToNewDC(pEntity.MedArt);
			if (pEntity.Darreichungsform != null)
			{
				pDataContract.Darreichungsform =
					MapperFactory.DarreichungsformDC_Darreichungsform.MapToNewDC(pEntity.Darreichungsform);
			}
			pDataContract.MedBemerkung = pEntity.MedBemerkung;
			pDataContract.MedVerordnet = pEntity.MedVerordnet;
			pDataContract.MedName = pEntity.MedName;
			pDataContract.Verordnungsdatum = pEntity.Verordnungsdatum;

			return pDataContract;
		}

		public override Medikamentenverordnung MergeWithEntity(MedikamentenverordnungDC pDataContract, Medikamentenverordnung pEntity)
		{
			ConcurrencyCheck(pDataContract.MedikamentenverordnungVersion, pEntity);

			pEntity.Morgens = pDataContract.Morgens;
			pEntity.Mittags = pDataContract.Mittags;
			pEntity.Abends = pDataContract.Abends;
			pEntity.Nachts = pDataContract.Nachts;
			pEntity.DepotErsterTag = pDataContract.DepotErsterTag;
			pEntity.DepotNaechsterTag = pDataContract.DepotNaechsterTag;
			pEntity.DepotMenge = pDataContract.DepotMenge;
			if (pDataContract.DepotRhythmus != null && pDataContract.DepotRhythmus.DepotRhythmusformOid.HasValue)
			{
				pEntity.DepotRhythmus = DAOFactory.GenericDAO.GetByID<DepotRhythmus>(pDataContract.DepotRhythmus.DepotRhythmusformOid.Value);
			}

			if (pDataContract.MedArt != null && pDataContract.MedArt.MedArtOid.HasValue)
			{
				pEntity.MedArt = DAOFactory.GenericDAO.GetByID<MedArt>(pDataContract.MedArt.MedArtOid.Value);
			}

			if (pDataContract.Darreichungsform != null && pDataContract.Darreichungsform.DarreichungsformOid.HasValue)
			{
				pEntity.Darreichungsform = DAOFactory.GenericDAO.GetByID<Darreichungsform>(pDataContract.Darreichungsform.DarreichungsformOid.Value);
			}

			pEntity.MedBemerkung = pDataContract.MedBemerkung;
			pEntity.MedVerordnet = pDataContract.MedVerordnet;
			pEntity.MedName = pDataContract.MedName;
			pEntity.Verordnungsdatum = pDataContract.Verordnungsdatum;

			return pEntity;
		}

		protected override bool AreDCAndEntityEqual(MedikamentenverordnungDC pDC, Medikamentenverordnung pEntity)
		{
			if (pDC.MedikamentenverordnungOid == null)
				return false;

			return pDC.MedikamentenverordnungOid == pEntity.Oid;
		}
	}
}
