public virtual void AddDataLogs(TDto dto, string actionType)
        {
            try
            {
                if (this.GenericService.GetOnDataLogs())
                {
                    SmartLogDTO.OnDataLogs = true;
                }
                else
                {
                    return;                                                                         // DO NOTHING
                }
                if (dto.EditedDate == null || ((DateTime)dto.EditedDate).Year == 1)
                {
                    dto.EditedDate = DateTime.Now;
                }

                List <string>       entityPropertyNames = typeof(TEntity).GetProperties().Select(s => s.Name).ToList();
                List <PropertyInfo> propertyInfos       = typeof(TDto).GetProperties().OrderBy(o => o.Name).ToList();
                foreach (PropertyInfo propertyInfo in propertyInfos)
                {
                    if (SmartLogDTO.CheckProperty(propertyInfo.PropertyType.Name, propertyInfo.Name))
                    {
                        if (!SmartLogDTO.OptionalNames.Contains(propertyInfo.Name) || entityPropertyNames.Contains(propertyInfo.Name))
                        {
                            this.GenericService.AddDataLogs(dto.GetID(), null, dto.EditedDate, dto.NMVNTaskID.ToString(), actionType, typeof(TDto).Name.Replace("DTO", ""), propertyInfo.Name, (propertyInfo.GetValue(dto) != null ? propertyInfo.GetValue(dto).ToString() : null));
                        }
                    }
                }
            }
            catch (Exception ex) { }
        }
        public override void AddViewDetailDataLogs(TDto dto, string actionType)
        {
            try
            {
                base.AddViewDetailDataLogs(dto, actionType);
                if (!SmartLogDTO.OnDataLogs)
                {
                    return;                         // DO NOTHING: IMPORTANT: SmartLogDTO.OnDataLogs WILL BE CHECKED AND SET EVERY TIME CALL AddDataLogs. TO: SHOULD CALL AddDataLogs BEFORE CALL AddViewDetailDataLogs
                }
                List <string>       entityPropertyNames = typeof(TEntityDetail).GetProperties().Select(s => s.Name).ToList();
                List <PropertyInfo> propertyInfos       = typeof(TDtoDetail).GetProperties().OrderBy(o => o.Name).ToList();

                List <string> entityViewDetailPropertyNames = typeof(TEntityViewDetail).GetProperties().Select(s => s.Name).ToList(); //JUST ADD PROPERTIES RETURNED BY TEntityViewDetail

                if (dto.GetDetails() != null && dto.GetDetails().Count > 0)
                {
                    dto.GetDetails().Each(detailDTO =>
                    {
                        foreach (PropertyInfo propertyInfo in propertyInfos)
                        {
                            if (SmartLogDTO.CheckProperty(propertyInfo.PropertyType.Name, propertyInfo.Name))
                            {
                                if ((!SmartLogDTO.OptionalNames.Contains(propertyInfo.Name) || entityPropertyNames.Contains(propertyInfo.Name)) && entityViewDetailPropertyNames.Contains(propertyInfo.Name))
                                {
                                    this.genericWithViewDetailService.AddDataLogs(dto.GetID(), detailDTO.GetID(), dto.EditedDate, dto.NMVNTaskID.ToString(), actionType, typeof(TDtoDetail).Name.Replace("DTO", ""), propertyInfo.Name, (propertyInfo.GetValue(detailDTO) != null ? propertyInfo.GetValue(detailDTO).ToString() : null));
                                }
                            }
                        }
                    });
                }
            }
            catch (Exception ex) { throw ex; }
        }