using BeWo.Data.Entities;

using BS.Shared.DataContracts;

namespace BeWo.Service.DCEntityMapper
{
    public class BargeldkassenDC_Bargeldkasse : AbstractIDCEntityMapper<Bargeldkasse, BargeldkassenDC>
    {
        public override BargeldkassenDC MergeWithDC(Bargeldkasse pEntity, BargeldkassenDC pDataContract)
        {
            pDataContract.BargeldkassenOid     = pEntity.Oid;
            pDataContract.BargeldkassenVersion = pEntity.Version;
            pDataContract.Kassenname           = pEntity.Kassenname;
            pDataContract.ObjectOid            = pEntity.ObjectOid;
            pDataContract.ObjectTid            = pEntity.ObjectTid;
            pDataContract.Auszahlungsintervall = pEntity.Auszahlungsintervall;

            pDataContract.Bargeldtransaktionen = MapperFactory.BargeldtransaktionDC_Bargeldtransaktion.MapToNewDCs(pEntity.Bargeldtransaktionen);

            return pDataContract;
        }

        public override Bargeldkasse MergeWithEntity(BargeldkassenDC pDataContract, Bargeldkasse pEntity)
        {
            ConcurrencyCheck(pDataContract.BargeldkassenVersion, pEntity);

            MapperFactory.BargeldtransaktionDC_Bargeldtransaktion.MergeWithEntitys(pDataContract.Bargeldtransaktionen, pEntity.Bargeldtransaktionen);

            pEntity.Oid                  = pDataContract.BargeldkassenOid;
            pEntity.Kassenname           = pDataContract.Kassenname;
            pEntity.ObjectOid            = pDataContract.ObjectOid;
            pEntity.ObjectTid            = pDataContract.ObjectTid;
            pEntity.Auszahlungsintervall = pDataContract.Auszahlungsintervall;

            return pEntity;
        }

        protected override bool AreDCAndEntityEqual(BargeldkassenDC pDC, Bargeldkasse pEntity)
        {
            if (pDC.BargeldkassenOid == null)
            {
                return false;
            }

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