| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- using CsvHelper.Configuration;
 
- using InABox.Core;
 
- using System.Collections.Generic;
 
- using System.Linq.Expressions;
 
- using System.Text;
 
- namespace InABox.Poster.CSV
 
- {
 
-     public interface ICSVClassMap
 
-     {
 
-         ClassMap ClassMap { get; }
 
-     }
 
-     public interface ICSVClassMap<T> : ICSVClassMap
 
-     {
 
-         new ClassMap<T> ClassMap { get; }
 
-         ClassMap ICSVClassMap.ClassMap => ClassMap;
 
-         void Map(string name, Expression<Func<T, object>> expr);
 
-     }
 
-     public class CSVClassMap<T> : ClassMap<T>, ICSVClassMap<T>
 
-     {
 
-         public ClassMap<T> ClassMap => this;
 
-         public void Map(string name, Expression<Func<T, object>> expr)
 
-         {
 
-             Map(expr).Name(name);
 
-         }
 
-     }
 
-     public interface ICSVExport<TPostable> : IPostResult<TPostable>
 
-         where TPostable : IPostable
 
-     {
 
-         Type Type { get; }
 
-         ICSVClassMap ClassMap { get; }
 
-         IEnumerable<object> Records { get; }
 
-     }
 
-     public interface ICSVExport<TExport, TPostable> : ICSVExport<TPostable>
 
-         where TExport : class
 
-         where TPostable : IPostable
 
-     {
 
-         new Type Type => typeof(TExport);
 
-         new CSVClassMap<TExport> ClassMap { get; }
 
-         new IEnumerable<TExport> Records { get; }
 
-         Type ICSVExport<TPostable>.Type => Type;
 
-         ICSVClassMap ICSVExport<TPostable>.ClassMap => ClassMap;
 
-         IEnumerable<object> ICSVExport<TPostable>.Records => Records;
 
-     }
 
-     public class CSVExport<TExport, TPostable> : ICSVExport<TExport, TPostable>
 
-         where TExport : class
 
-         where TPostable : IPostable
 
-     {
 
-         public CSVClassMap<TExport> ClassMap { get; } = new CSVClassMap<TExport>();
 
-         public IEnumerable<TExport> Records => items.Where(x => x.Item2.PostedStatus == PostedStatus.Posted).Select(x => x.Item1);
 
-         private List<Tuple<TExport, TPostable>> items = new List<Tuple<TExport, TPostable>>();
 
-         private Dictionary<Type, List<IPostableFragment<TPostable>>> fragments = new Dictionary<Type, List<IPostableFragment<TPostable>>>();
 
-         public IEnumerable<TPostable> PostedEntities => items.Select(x => x.Item2);
 
-         public IEnumerable<KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>> Fragments =>
 
-             fragments.Select(x => new KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>(x.Key, x.Value));
 
-         public void DefineMapping(List<Tuple<string, Expression<Func<TExport, object>>>> mappings)
 
-         {
 
-             foreach(var (name, expr) in mappings)
 
-             {
 
-                 ClassMap.Map(name, expr);
 
-             }
 
-         }
 
-         public void Map(string name,  Expression<Func<TExport, object>> expr)
 
-         {
 
-             ClassMap.Map(name, expr);
 
-         }
 
-         public void AddSuccess(TExport export, TPostable postable)
 
-         {
 
-             postable.Post();
 
-             items.Add(new(export, postable));
 
-         }
 
-     }
 
-     /// <summary>
 
-     /// Defines an interface for posters that can export to CSV.
 
-     /// </summary>
 
-     /// <typeparam name="TEntity"></typeparam>
 
-     [Caption("CSV")]
 
-     public interface ICSVPoster<TEntity> : IPoster<TEntity, CSVPosterSettings>
 
-         where TEntity : Entity, IPostable, IRemotable, IPersistent, new()
 
-     {
 
-         bool BeforePost(IDataModel<TEntity> model);
 
-         ICSVExport<TEntity> Process(IDataModel<TEntity> model);
 
-         void AfterPost(IDataModel<TEntity> model, IPostResult<TEntity> result);
 
-     }
 
- }
 
 
  |