/// <summary>
        /// update a user info
        /// </summary>
        /// <param name="smsDTO"></param>
        public void UpdateVip(VipDTO vipDTO)
        {
            if (vipDTO == null || vipDTO.Id == Guid.Empty)
            {
                throw new ArgumentException(Messages.warning_CannotUpdateVipWithEmptyInformation);
            }

            //get persisted item
            var persisted = _vipRepository.Get(vipDTO.Id);

            if (persisted != null) //if customer exist
            {
                //materialize from customer dto
                var current = MaterializeVipFromDto(vipDTO);

                //Merge changes
                _vipRepository.Merge(persisted, current);

                //commit unit of work
                _vipRepository.UnitOfWork.Commit();
            }
            else
            {
                LoggerFactory.CreateLog().LogWarning(Messages.warning_CannotUpdateNonExistingVIP);
            }
        }
        Vip MaterializeVipFromDto(VipDTO vipDTO)
        {
            var current = VipFactory.CreateVip(vipDTO.CreateOn, vipDTO.EndDateTime, vipDTO.AccountId, vipDTO.Remark);

            current.ChangeCurrentIdentity(vipDTO.Id);

            return(current);
        }
        /// <summary>
        /// news a account
        /// </summary>
        /// <param name="praiseDTO"></param>
        /// <returns></returns>
        public VipDTO AddNewVip(VipDTO vipDTO)
        {
            //check preconditions
            if (vipDTO == null)
            {
                throw new ArgumentException(Messages.warning_CannotAddVipWithEmptyInformation);
            }

            //Create the entity and the required associated data
            var vip = VipFactory.CreateVip(vipDTO.CreateOn, vipDTO.EndDateTime, vipDTO.AccountId, vipDTO.Remark);

            //save entity
            SaveVip(vip);

            //return the data with id and assigned default values
            return(vip.ProjectedAs <VipDTO>());
        }