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

using BS.Shared.DataContracts;

namespace BeWo.Service.DCEntityMapper
{
	public class OvertimeDC_Overtime : AbstractIDCEntityMapper<Overtime, OvertimeDC>
	{
		public override OvertimeDC MergeWithDC(Overtime pEntity, OvertimeDC pDataContract)
		{
			if (pEntity.Auszahlungsart != null)
			{
				pDataContract.Auszahlungsart = MapperFactory.AuszahlungsartDC_Auszahlungsart.MapToNewDC(pEntity.Auszahlungsart);
			}
			pDataContract.Betrag = pEntity.Betrag;
			pDataContract.Date = pEntity.Date;
			pDataContract.EmployeeOid = pEntity.EmployeeOid;
			pDataContract.Notice = pEntity.Notice;
			pDataContract.OvertimeOid = pEntity.Oid;
			pDataContract.OvertimeVersion = pEntity.Version;

			return pDataContract;
		}

		public override Overtime MergeWithEntity(OvertimeDC pDataContract, Overtime pEntity)
		{
			ConcurrencyCheck(pDataContract.OvertimeVersion, pEntity);

			if (pDataContract.Auszahlungsart != null && pDataContract.Auszahlungsart.AuszahlungsartOid.HasValue)
				pEntity.Auszahlungsart = DAOFactory.GenericDAO.LoadByID<Auszahlungsart>(pDataContract.Auszahlungsart.AuszahlungsartOid.Value);

			pEntity.Betrag = pDataContract.Betrag;
			pEntity.Date = pDataContract.Date;
			pEntity.Notice = pDataContract.Notice;
			pEntity.Oid = pDataContract.OvertimeOid;

			return pEntity;
		}

		protected override bool AreDCAndEntityEqual(OvertimeDC pDC, Overtime pEntity)
		{
			if (pDC.OvertimeOid == null)
				return false;

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