Update automapper

This commit is contained in:
2016-09-24 00:06:34 -04:00
parent f473c64540
commit 6789c1b3b5
32 changed files with 254 additions and 206 deletions
@@ -1,20 +0,0 @@
using Heroic.AutoMapper;
using InventoryTraker.Web.Tests.Utilities;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(InventoryTraker.Web.Tests.AutoMapperConfig), "Configure")]
namespace InventoryTraker.Web.Tests
{
public static class AutoMapperConfig
{
public static void Configure()
{
//NOTE: By default, the current project and all referenced projects will be scanned.
// You can customize this by passing in a lambda to filter the assemblies by name,
// like so:
//HeroicAutoMapperConfigurator.LoadMapsFromCallerAndReferencedAssemblies(x => x.Name.StartsWith("YourPrefix"));
//HeroicAutoMapperConfigurator.LoadMapsFromCallerAndReferencedAssemblies();
//If you run into issues with the maps not being located at runtime, try using this method instead:
HeroicAutoMapperConfigurator.LoadMapsFromAssemblyContainingTypeAndReferencedAssemblies<MovementReportWriterTests>();
}
}
}
+2 -4
View File
@@ -1,6 +1,4 @@
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
using NUnit.Framework;
using NUnit.Framework;
namespace InventoryTraker.Web.Tests
{
@@ -10,7 +8,7 @@ namespace InventoryTraker.Web.Tests
[OneTimeSetUp]
public void S()
{
HeroicAutoMapperConfigurator.LoadMapsFromAssemblyContainingTypeAndReferencedAssemblies<Inventory>();
AutoMapperConfig.Configure();
}
}
}
@@ -30,8 +30,8 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AutoMapper, Version=4.2.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.2.0\lib\net45\AutoMapper.dll</HintPath>
<Reference Include="AutoMapper, Version=5.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.5.1.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Heroic.AutoMapper, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
@@ -42,8 +42,8 @@
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Reference Include="nunit.framework, Version=3.4.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.4.0\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
@@ -60,7 +60,6 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="App_Start\AutoMapperConfig.cs" />
<Compile Include="Models\InventoryAddForm.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="App_Start\Setup.cs" />
@@ -10,10 +10,12 @@ namespace InventoryTraker.Web.Tests.Models
[TestFixture]
public class InventoryAddFormTests
{
private IMapper _mapper;
[OneTimeSetUp]
public void StartUp()
{
HeroicAutoMapperConfigurator.LoadMapsFromAssemblyContainingTypeAndReferencedAssemblies<Inventory>();
_mapper = AutoMapperConfig.Config.CreateMapper();
}
[Test]
@@ -28,7 +30,7 @@ namespace InventoryTraker.Web.Tests.Models
Quantity = 32
};
var inventory = Mapper.Map<Inventory>(form);
var inventory = _mapper.Map<Inventory>(form);
Assert.That(inventory.AddedDate, Is.EqualTo(form.AddedDate));
Assert.That(inventory.ExpirationDate, Is.EqualTo(form.ExpirationDate));
@@ -1,7 +1,6 @@
using System;
using System.IO;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
using AutoMapper;
using InventoryTraker.Web.Models;
using InventoryTraker.Web.Utilities;
using NUnit.Framework;
@@ -11,6 +10,14 @@ namespace InventoryTraker.Web.Tests.Utilities
[TestFixture]
public class DistributionReportWriterTests
{
private IMapper _mapper;
[OneTimeSetUp]
public void StartUp()
{
_mapper = AutoMapperConfig.Config.CreateMapper();
}
private readonly DistributionReport[] _distributionReports =
{
new DistributionReport
@@ -54,7 +61,7 @@ namespace InventoryTraker.Web.Tests.Utilities
(var outputFile
= new StreamWriter(Path.Combine(@"c:\temp", "DistributionReport.xlsx")))
{
var writer = new DistributionReportWriter();
var writer = new DistributionReportWriter(_mapper);
writer.WriteStream(_distributionReports, outputFile.BaseStream);
}
}
@@ -1,7 +1,5 @@
using System;
using System.IO;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
using InventoryTraker.Web.Models;
using InventoryTraker.Web.Utilities;
using NUnit.Framework;
@@ -1,7 +1,6 @@
using System;
using System.IO;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
using AutoMapper;
using InventoryTraker.Web.Models;
using InventoryTraker.Web.Utilities;
using NUnit.Framework;
@@ -11,6 +10,14 @@ namespace InventoryTraker.Web.Tests.Utilities
[TestFixture]
public class MovementReportWriterTests
{
private IMapper _mapper;
[OneTimeSetUp]
public void StartUp()
{
_mapper = AutoMapperConfig.Config.CreateMapper();
}
private readonly MovementReport _movementReport
= new MovementReport
{
@@ -61,7 +68,7 @@ namespace InventoryTraker.Web.Tests.Utilities
(var outputFile
= new StreamWriter(Path.Combine(@"c:\temp", "MovementReport.xlsx")))
{
var writer = new MovementReportWriter();
var writer = new MovementReportWriter(_mapper);
writer.WriteStream(_movementReport, outputFile.BaseStream);
}
}
+4
View File
@@ -38,6 +38,10 @@
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.1.1.0" newVersion="5.1.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+2 -3
View File
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoMapper" version="4.2.0" targetFramework="net452" />
<package id="Heroic.AutoMapper" version="2.0.0" targetFramework="net452" />
<package id="AutoMapper" version="5.1.1" targetFramework="net452" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
<package id="NUnit" version="3.4.1" targetFramework="net452" />
<package id="NUnit" version="3.4.0" targetFramework="net452" />
<package id="WebActivatorEx" version="2.1.0" targetFramework="net452" />
</packages>
@@ -1,21 +1,18 @@
using Heroic.AutoMapper;
using AutoMapper;
using InventoryTraker.Web;
using InventoryTraker.Web.Controllers;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(AutoMapperConfig), "Configure")]
namespace InventoryTraker.Web
{
public static class AutoMapperConfig
{
public static MapperConfiguration Config { get; private set; }
public static void Configure()
{
//NOTE: By default, the current project and all referenced projects will be scanned.
// You can customize this by passing in a lambda to filter the assemblies by name,
// like so:
//HeroicAutoMapperConfigurator.LoadMapsFromCallerAndReferencedAssemblies(x => x.Name.StartsWith("YourPrefix"));
//HeroicAutoMapperConfigurator.LoadMapsFromCallerAndReferencedAssemblies();
//If you run into issues with the maps not being located at runtime, try using this method instead:
HeroicAutoMapperConfigurator.LoadMapsFromAssemblyContainingTypeAndReferencedAssemblies<ControllerBase>();
Config = new MapperConfiguration(cfg =>
cfg.AddProfiles(typeof(Controllers.UserController))
);
}
}
}
@@ -3,12 +3,12 @@ using System.Web;
using Heroic.Web.IoC;
using System.Web.Http;
using System.Web.Mvc;
using AutoMapper;
using InventoryTraker.Web.Core;
using InventoryTraker.Web.Data;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using StructureMap.Graph;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(InventoryTraker.Web.StructureMapConfig), "Configure")]
namespace InventoryTraker.Web
@@ -42,6 +42,8 @@ namespace InventoryTraker.Web
cfg.For<IAuthenticationManager>().Use(ctx => ctx.GetInstance<HttpRequestBase>().GetOwinContext().Authentication);
//TODO: Add other registries and configure your container (if needed)
var mapper = AutoMapperConfig.Config.CreateMapper();
cfg.For<IMapper>().Use(x => mapper);
});
var resolver = new StructureMapDependencyResolver();
@@ -1,6 +1,8 @@
using System.Linq;
using System.Web.Mvc;
using AutoMapper;
using InventoryTraker.Web.ActionResults;
using InventoryTraker.Web.Data;
using InventoryTraker.Web.Utilities;
using NLog;
@@ -15,10 +15,12 @@ namespace InventoryTraker.Web.Controllers
public class InventoryController : ControllerBase
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public InventoryController(AppDbContext context)
public InventoryController(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public ActionResult Index()
@@ -30,7 +32,7 @@ namespace InventoryTraker.Web.Controllers
{
var viewModels =
CurrentInventory()
.ProjectTo<InventoryViewModel>()
.ProjectTo<InventoryViewModel>(_mapper.ConfigurationProvider)
.ToArray();
return BetterJson(viewModels);
@@ -39,7 +41,7 @@ namespace InventoryTraker.Web.Controllers
public JsonResult Find(int id)
{
var inventory = _context.Inventories.Find(id);
var viewModel = Mapper.Map<InventoryViewModel>(inventory);
var viewModel = _mapper.Map<InventoryViewModel>(inventory);
return BetterJson(viewModel);
}
@@ -57,7 +59,7 @@ namespace InventoryTraker.Web.Controllers
var viewModels =
CurrentInventory()
.ProjectTo<InventoryViewModel>()
.ProjectTo<InventoryViewModel>(_mapper.ConfigurationProvider)
.ToArray();
var excel = writer.Write(viewModels);
@@ -77,7 +79,7 @@ namespace InventoryTraker.Web.Controllers
if (!ModelState.IsValid)
return GetModelStateErrorListJson();
var inventory = Mapper.Map<Inventory>(form);
var inventory = _mapper.Map<Inventory>(form);
inventory.InventoryType = _context.InventoryTypes.Find(form.InventoryTypeId);
if (inventory.InventoryType == null)
@@ -98,7 +100,7 @@ namespace InventoryTraker.Web.Controllers
};
_context.SaveChanges();
var model = Mapper.Map<InventoryViewModel>(inventory);
var model = _mapper.Map<InventoryViewModel>(inventory);
return BetterJson(model);
}
@@ -156,7 +158,7 @@ namespace InventoryTraker.Web.Controllers
_context.SaveChanges();
return BetterJson(CurrentInventory()
.ProjectTo<InventoryViewModel>()
.ProjectTo<InventoryViewModel>(_mapper.ConfigurationProvider)
.ToArray());
}
@@ -207,7 +209,8 @@ namespace InventoryTraker.Web.Controllers
_context.SaveChanges();
return BetterJson(Mapper.Map<InventoryViewModel>(inventory));
return BetterJson(_mapper.Map<InventoryViewModel>(inventory));
}
}
}
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using AutoMapper;
@@ -14,10 +13,12 @@ namespace InventoryTraker.Web.Controllers
public class InventoryTypeController : ControllerBase
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public InventoryTypeController(AppDbContext context)
public InventoryTypeController(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public ActionResult Index()
@@ -29,7 +30,7 @@ namespace InventoryTraker.Web.Controllers
{
var viewModels = _context.InventoryTypes
.OrderByDescending(x => x.Name)
.ProjectTo<InventoryTypeViewModel>();
.ProjectTo<InventoryTypeViewModel>(_mapper.ConfigurationProvider);
return BetterJson(viewModels.ToArray());
}
@@ -41,7 +42,7 @@ namespace InventoryTraker.Web.Controllers
var viewModels =
_context.InventoryTypes
.OrderByDescending(x => x.Name)
.ProjectTo<InventoryTypeViewModel>()
.ProjectTo<InventoryTypeViewModel>(_mapper.ConfigurationProvider)
.ToArray();
var excel = writer.Write(viewModels);
@@ -60,11 +61,11 @@ namespace InventoryTraker.Web.Controllers
if (!ModelState.IsValid)
return GetModelStateErrorListJson();
var inventoryType = Mapper.Map<InventoryType>(form);
var inventoryType = _mapper.Map<InventoryType>(form);
_context.InventoryTypes.Add(inventoryType);
_context.SaveChanges();
var model = Mapper.Map<InventoryTypeViewModel>(inventoryType);
var model = _mapper.Map<InventoryTypeViewModel>(inventoryType);
return BetterJson(model);
}
@@ -74,11 +75,11 @@ namespace InventoryTraker.Web.Controllers
return GetModelStateErrorListJson();
var inventoryType = _context.InventoryTypes.Find(form.Id);
Mapper.Map(form, inventoryType);
_mapper.Map(form, inventoryType);
_context.SaveChanges();
var model = Mapper.Map<InventoryTypeViewModel>(inventoryType);
var model = _mapper.Map<InventoryTypeViewModel>(inventoryType);
return BetterJson(model);
}
}
@@ -10,16 +10,18 @@ namespace InventoryTraker.Web.Controllers
public class ProfileController : ControllerBase
{
private readonly ApplicationUserManager _userManager;
private readonly IMapper _mapper;
public ProfileController(ApplicationUserManager userManager)
public ProfileController(ApplicationUserManager userManager, IMapper mapper)
{
_userManager = userManager;
_mapper = mapper;
}
public ActionResult Index()
{
var user = _userManager.FindById(User.Identity.GetUserId());
var model = Mapper.Map<ProfileForm>(user);
var model = _mapper.Map<ProfileForm>(user);
return View(model);
}
@@ -9,10 +9,17 @@ namespace InventoryTraker.Web.Controllers
public class ReportController : ControllerBase
{
private readonly ReportService _reportService;
private readonly DistributionReportWriter _distributionReportWriter;
private readonly MovementReportWriter _movementReportWriter;
public ReportController(ReportService reportService)
public ReportController(
ReportService reportService,
DistributionReportWriter distributionReportWriter,
MovementReportWriter movementReportWriter)
{
_reportService = reportService;
_distributionReportWriter = distributionReportWriter;
_movementReportWriter = movementReportWriter;
}
[HttpGet]
@@ -32,8 +39,7 @@ namespace InventoryTraker.Web.Controllers
{
var report = _reportService.GetDistributionReport(startDate, endDate);
var writer = new DistributionReportWriter();
var excel = writer.Write(report);
var excel = _distributionReportWriter.Write(report);
var filename = $"InventoryDistributionReport{startDate:yyyyMMdd}-{endDate:yyyyMMdd}.xlsx";
@@ -61,8 +67,7 @@ namespace InventoryTraker.Web.Controllers
{
var report = _reportService.GetMovementReport(month);
var writer = new MovementReportWriter();
var excel = writer.Write(report);
var excel = _movementReportWriter.Write(report);
var filename = $"MonthlyInventoryReport{report.Month:MMMMyyyy}.xlsx";
@@ -1,6 +1,6 @@
using System.Collections;
using System.Linq;
using System.Linq;
using System.Web.Mvc;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using InventoryTraker.Web.Attributes;
using InventoryTraker.Web.Core;
@@ -12,10 +12,12 @@ namespace InventoryTraker.Web.Controllers
public class TransactionController : ControllerBase
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public TransactionController(AppDbContext context)
public TransactionController(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public ActionResult Index()
@@ -27,7 +29,7 @@ namespace InventoryTraker.Web.Controllers
{
var viewModels =
_context.Transactions
.ProjectTo<TransactionViewModel>()
.ProjectTo<TransactionViewModel>(_mapper.ConfigurationProvider)
.ToArray();
return BetterJson(viewModels);
@@ -50,7 +52,7 @@ namespace InventoryTraker.Web.Controllers
var totalItems = _context.Transactions.Count();
var transactions = query
.ProjectTo<TransactionViewModel>()
.ProjectTo<TransactionViewModel>(_mapper.ConfigurationProvider)
.ToArray();
return BetterJson(new { totalItems, transactions });
}
@@ -14,23 +14,25 @@ namespace InventoryTraker.Web.Controllers
public class UserController : ControllerBase
{
private readonly ApplicationUserManager _userManager;
private readonly IMapper _mapper;
public UserController(ApplicationUserManager userManager)
{
_userManager = userManager;
}
public UserController(ApplicationUserManager userManager, IMapper mapper)
{
_userManager = userManager;
_mapper = mapper;
}
public ActionResult Index()
public ActionResult Index()
{
return View();
}
public JsonResult All()
{
var users =
var users =
_userManager
.Users
.ProjectTo<UserViewModel>()
.ProjectTo<UserViewModel>(_mapper.ConfigurationProvider)
.OrderBy(u => u.UserName);
return BetterJson(users);
@@ -47,7 +49,7 @@ namespace InventoryTraker.Web.Controllers
new User
{
Email = form.Email,
UserName = form.UserName
UserName = form.UserName,
};
var identityResult = await _userManager.CreateAsync(user, form.Password);
@@ -55,7 +57,7 @@ namespace InventoryTraker.Web.Controllers
if (!identityResult.Succeeded)
return GetErrorListJson(identityResult.Errors.ToArray());
return BetterJson(Mapper.Map<UserViewModel>(user));
return BetterJson(_mapper.Map<UserViewModel>(user));
}
[ActionLog]
@@ -83,7 +85,7 @@ namespace InventoryTraker.Web.Controllers
if (!identityResult.Succeeded)
return GetErrorListJson(identityResult.Errors.ToArray());
return BetterJson(Mapper.Map<UserViewModel>(user));
return BetterJson(_mapper.Map<UserViewModel>(user));
}
}
}
@@ -43,8 +43,8 @@
<HintPath>..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AutoMapper, Version=4.2.0.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.4.2.0\lib\net45\AutoMapper.dll</HintPath>
<Reference Include="AutoMapper, Version=5.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.5.1.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="ClosedXML, Version=0.76.0.0, Culture=neutral, PublicKeyToken=fd1eb21b62ae805b, processorArchitecture=MSIL">
@@ -71,10 +71,6 @@
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Heroic.AutoMapper, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Heroic.AutoMapper.2.0.0\lib\net45\Heroic.AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Heroic.Web.IoC, Version=4.1.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Heroic.Web.IoC.4.1.2\lib\net45\Heroic.Web.IoC.dll</HintPath>
<Private>True</Private>
+10 -2
View File
@@ -1,12 +1,12 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using Heroic.AutoMapper;
using AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class InventoryAddForm : IMapTo<Inventory>
public class InventoryAddForm
{
[HiddenInput(DisplayValue = false)]
[Required]
@@ -22,5 +22,13 @@ namespace InventoryTraker.Web.Models
public DateTime AddedDate { get; set; }
public string Memo { get; set; }
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<InventoryAddForm, Inventory>();
}
}
}
}
@@ -1,11 +1,11 @@
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using Heroic.AutoMapper;
using AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class InventoryTypeViewModel : IMapFrom<InventoryType>, IMapTo<InventoryType>
public class InventoryTypeViewModel
{
[HiddenInput]
public int Id { get; set; }
@@ -33,5 +33,14 @@ namespace InventoryTraker.Web.Models
[Required]
public decimal PricePerCase { get; set; }
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<InventoryType, InventoryTypeViewModel>();
CreateMap<InventoryTypeViewModel, InventoryType>();
}
}
}
}
@@ -1,11 +1,10 @@
using System;
using AutoMapper;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class InventoryViewModel : IMapFrom<Inventory>, IHaveCustomMappings
public class InventoryViewModel
{
public int Id { get; set; }
@@ -31,16 +30,19 @@ namespace InventoryTraker.Web.Models
public bool IsExpired => ExpirationDate < DateTime.Today;
public void CreateMappings(IMapperConfiguration configuration)
public class AutoMapperProfile : Profile
{
configuration.CreateMap<Inventory, InventoryViewModel>()
.ForMember(d => d.InventoryTypeId, opt => opt.MapFrom(s => s.InventoryType.Id))
.ForMember(d => d.Name, opt => opt.MapFrom(s => s.InventoryType.Name))
.ForMember(d => d.UnitsPerCase, opt => opt.MapFrom(s => s.InventoryType.UnitsPerCase))
.ForMember(d => d.ContainerType, opt => opt.MapFrom(s => s.InventoryType.ContainerType))
.ForMember(d => d.WeightPerCase, opt => opt.MapFrom(s => s.InventoryType.WeightPerCase))
.ForMember(d => d.PricePerCase, opt => opt.MapFrom(s => s.InventoryType.PricePerCase))
.ForMember(d => d.AddedDate, opt => opt.MapFrom(s => s.AddedDate));
public AutoMapperProfile()
{
CreateMap<Inventory, InventoryViewModel>()
.ForMember(d => d.InventoryTypeId, opt => opt.MapFrom(s => s.InventoryType.Id))
.ForMember(d => d.Name, opt => opt.MapFrom(s => s.InventoryType.Name))
.ForMember(d => d.UnitsPerCase, opt => opt.MapFrom(s => s.InventoryType.UnitsPerCase))
.ForMember(d => d.ContainerType, opt => opt.MapFrom(s => s.InventoryType.ContainerType))
.ForMember(d => d.WeightPerCase, opt => opt.MapFrom(s => s.InventoryType.WeightPerCase))
.ForMember(d => d.PricePerCase, opt => opt.MapFrom(s => s.InventoryType.PricePerCase))
.ForMember(d => d.AddedDate, opt => opt.MapFrom(s => s.AddedDate));
}
}
}
}
+8 -6
View File
@@ -1,11 +1,10 @@
using System.ComponentModel.DataAnnotations;
using AutoMapper;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class ProfileForm : IMapFrom<User>, IHaveCustomMappings
public class ProfileForm
{
[Required, Display(Name = "Full Name", Prompt = "Full Name (ex: John Doe)...")]
public string FullName { get; set; }
@@ -13,11 +12,14 @@ namespace InventoryTraker.Web.Models
[Required, DataType(DataType.EmailAddress), Display(Prompt = "your@email.com...")]
public string EmailAddress { get; set; }
public void CreateMappings(IMapperConfiguration configuration)
public class AutoMapperProfile : Profile
{
configuration.CreateMap<User, ProfileForm>()
.ForMember(d => d.FullName, opt => opt.MapFrom(s => s.UserName))
.ForMember(d => d.EmailAddress, opt => opt.MapFrom(s => s.Email));
public AutoMapperProfile()
{
CreateMap<User, ProfileForm>()
.ForMember(d => d.FullName, opt => opt.MapFrom(s => s.UserName))
.ForMember(d => d.EmailAddress, opt => opt.MapFrom(s => s.Email));
}
}
}
}
@@ -1,12 +1,11 @@
using System;
using System.ComponentModel.DataAnnotations;
using AutoMapper;
using Heroic.AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class TransactionViewModel : IMapFrom<Transaction>, IHaveCustomMappings
public class TransactionViewModel
{
[Required]
public int Id { get; set; }
@@ -37,27 +36,30 @@ namespace InventoryTraker.Web.Models
public DateTime Timestamp { get; set; }
public void CreateMappings(IMapperConfiguration configuration)
public class AutoMapperProfile : Profile
{
configuration.CreateMap<Transaction, TransactionViewModel>()
.ForMember(d => d.InventoryId,
opt => opt.MapFrom(s => s.Inventory.Id))
.ForMember(d => d.Name,
opt => opt.MapFrom(s => s.Inventory.InventoryType.Name))
.ForMember(d => d.ExpirationDate,
opt => opt.MapFrom(s => s.Inventory.ExpirationDate))
.ForMember(d => d.AddedDate,
opt => opt.MapFrom(s => s.Inventory.AddedDate))
.ForMember(d => d.UnitsPerCase,
opt => opt.MapFrom(s => s.Inventory.InventoryType.UnitsPerCase))
.ForMember(d => d.ContainerType,
opt => opt.MapFrom(s => s.Inventory.InventoryType.ContainerType))
.ForMember(d => d.WeightPerCase,
opt => opt.MapFrom(s => s.Inventory.InventoryType.WeightPerCase))
.ForMember(d => d.TransactionType,
opt => opt.MapFrom(s => s.TransactionType.ToString()))
.ForMember(d => d.PreviousQuantity,
opt => opt.MapFrom(s => s.CurrentQuantity - s.AddedQuantity + s.RemovedQuantity));
public AutoMapperProfile()
{
CreateMap<Transaction, TransactionViewModel>()
.ForMember(d => d.InventoryId,
opt => opt.MapFrom(s => s.Inventory.Id))
.ForMember(d => d.Name,
opt => opt.MapFrom(s => s.Inventory.InventoryType.Name))
.ForMember(d => d.ExpirationDate,
opt => opt.MapFrom(s => s.Inventory.ExpirationDate))
.ForMember(d => d.AddedDate,
opt => opt.MapFrom(s => s.Inventory.AddedDate))
.ForMember(d => d.UnitsPerCase,
opt => opt.MapFrom(s => s.Inventory.InventoryType.UnitsPerCase))
.ForMember(d => d.ContainerType,
opt => opt.MapFrom(s => s.Inventory.InventoryType.ContainerType))
.ForMember(d => d.WeightPerCase,
opt => opt.MapFrom(s => s.Inventory.InventoryType.WeightPerCase))
.ForMember(d => d.TransactionType,
opt => opt.MapFrom(s => s.TransactionType.ToString()))
.ForMember(d => d.PreviousQuantity,
opt => opt.MapFrom(s => s.CurrentQuantity - s.AddedQuantity + s.RemovedQuantity));
}
}
}
}
+10 -2
View File
@@ -1,10 +1,10 @@
using System.ComponentModel.DataAnnotations;
using Heroic.AutoMapper;
using AutoMapper;
using InventoryTraker.Web.Core;
namespace InventoryTraker.Web.Models
{
public class UserViewModel : IMapFrom<User>
public class UserViewModel
{
[Required]
[StringLength(128)]
@@ -20,5 +20,13 @@ namespace InventoryTraker.Web.Models
{
return $"UserName: {UserName}, email: {Email}";
}
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<User, UserViewModel>();
}
}
}
}
@@ -12,10 +12,12 @@ namespace InventoryTraker.Web.Services
public class ReportService
{
private readonly AppDbContext _context;
private readonly IMapper _mapper;
public ReportService(AppDbContext context)
public ReportService(AppDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public DistributionReport[] GetDistributionReport(DateTime startDate, DateTime endDate)
@@ -42,7 +44,7 @@ namespace InventoryTraker.Web.Services
Date = item.Date,
Destination = item.Destination,
Transactions =
Mapper.Map<IList<Transaction>, IList<TransactionViewModel>>
_mapper.Map<IList<Transaction>, IList<TransactionViewModel>>
(item.Transactions).ToArray()
};
@@ -149,7 +151,7 @@ namespace InventoryTraker.Web.Services
into grp
select new MovementReportItem
{
InventoryType = Mapper.Map<InventoryTypeViewModel>(grp.Key),
InventoryType = _mapper.Map<InventoryTypeViewModel>(grp.Key),
BeginningQuantity = grp.Sum(g => g.BeginningQuantity),
AddedQuantity = grp.Sum(g => g.AddedQuantity),
TotalAvailableQuantity = grp.Sum(g => g.TotalAvailableQuantity),
@@ -6,14 +6,13 @@ using ClosedXML.Excel;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Excel;
using Heroic.AutoMapper;
using InventoryTraker.Web.Models;
namespace InventoryTraker.Web.Utilities
{
public class DistributionReportWriter
{
public class DistributionReportExportItem : IMapFrom<TransactionViewModel>, IHaveCustomMappings
public class DistributionReportExportItem
{
public string Name { get; set; }
public string UnitsPerCaseContainerType { get; set; }
@@ -22,18 +21,21 @@ namespace InventoryTraker.Web.Utilities
public string UnitQuantity { get; set; }
public string Weight { get; set; }
public void CreateMappings(IMapperConfiguration configuration)
public class AutoMapperProfile : Profile
{
configuration.CreateMap<TransactionViewModel, DistributionReportExportItem>()
public AutoMapperProfile()
{
CreateMap<TransactionViewModel, DistributionReportExportItem>()
.ForMember(d => d.Name, opt => opt.MapFrom(i => i.Name))
.ForMember(d => d.UnitsPerCaseContainerType,
opt => opt.MapFrom(i => $"{i.UnitsPerCase} / {i.ContainerType}"))
.ForMember(d => d.ExpirationDate,
opt => opt.MapFrom(i => i.ExpirationDate.ToShortDateString()))
.ForMember(d => d.UnitQuantity,
opt => opt.MapFrom(i => i.RemovedQuantity*i.UnitsPerCase))
opt => opt.MapFrom(i => i.RemovedQuantity * i.UnitsPerCase))
.ForMember(d => d.Weight,
opt => opt.MapFrom(i => $"{i.WeightPerCase*i.RemovedQuantity:0} lbs"));
opt => opt.MapFrom(i => $"{i.WeightPerCase * i.RemovedQuantity:0} lbs"));
}
}
}
@@ -50,6 +52,13 @@ namespace InventoryTraker.Web.Utilities
}
}
private readonly IMapper _mapper;
public DistributionReportWriter(IMapper mapper)
{
_mapper = mapper;
}
public byte[] Write(IEnumerable<DistributionReport> reports)
{
using (var stream = new MemoryStream())
@@ -75,7 +84,7 @@ namespace InventoryTraker.Web.Utilities
writer.WriteField(report.Date.ToShortDateString());
writer.NextRecord();
var items =
Mapper.Map<IEnumerable<TransactionViewModel>, IEnumerable<DistributionReportExportItem>>
_mapper.Map<IEnumerable<TransactionViewModel>, IEnumerable<DistributionReportExportItem>>
(report.Transactions)
.OrderBy(i => i.Name);
writer.WriteRecords(items);
@@ -7,14 +7,13 @@ using ClosedXML.Excel;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Excel;
using Heroic.AutoMapper;
using InventoryTraker.Web.Models;
namespace InventoryTraker.Web.Utilities
{
public class MovementReportWriter
{
public class MovementReportExportItem : IMapFrom<MovementReportItem>, IHaveCustomMappings
public class MovementReportExportItem
{
public string Name { get; set; }
public string UnitsPerCaseContainerType { get; set; }
@@ -25,45 +24,48 @@ namespace InventoryTraker.Web.Utilities
public string AdjustmentQuantity { get; set; }
public string EndingQuantity { get; set; }
public void CreateMappings(IMapperConfiguration configuration)
public class AutoMapperProfile : Profile
{
Func<int, int, string> formatCases =
public AutoMapperProfile()
{
Func<int, int, string> formatCases =
(cases, unitsPerCase) => $"{cases * unitsPerCase} ({cases} cs)";
Func<int, int, string> hideEmptyCases =
(cases, unitsPerCase) =>
cases > 0
? formatCases(cases, unitsPerCase)
: "";
Func<int, int, string> hideEmptyCases =
(cases, unitsPerCase) =>
cases > 0
? formatCases(cases, unitsPerCase)
: "";
Func<int, int, string> negative =
(cases, unitsPerCase) =>
cases > 0
? "- " + hideEmptyCases(cases, unitsPerCase)
: "";
Func<int, int, string> negative =
(cases, unitsPerCase) =>
cases > 0
? "- " + hideEmptyCases(cases, unitsPerCase)
: "";
configuration.CreateMap<MovementReportItem, MovementReportExportItem>()
.ForMember(d => d.Name, opt => opt.MapFrom(i => i.InventoryType.Name))
.ForMember(d => d.UnitsPerCaseContainerType,
opt => opt.MapFrom(i => i.InventoryType.UnitsPerCaseContainerType))
.ForMember(d => d.BeginningQuantity,
opt => opt.MapFrom(i =>
formatCases(i.BeginningQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.AddedQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.AddedQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.TotalAvailableQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.TotalAvailableQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.AdjustmentQuantity,
opt => opt.MapFrom(i =>
negative(i.AdjustmentQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.DistributedQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.DistributedQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.EndingQuantity,
opt => opt.MapFrom(i =>
formatCases(i.EndingQuantity, i.InventoryType.UnitsPerCase)));
CreateMap<MovementReportItem, MovementReportExportItem>()
.ForMember(d => d.Name, opt => opt.MapFrom(i => i.InventoryType.Name))
.ForMember(d => d.UnitsPerCaseContainerType,
opt => opt.MapFrom(i => i.InventoryType.UnitsPerCaseContainerType))
.ForMember(d => d.BeginningQuantity,
opt => opt.MapFrom(i =>
formatCases(i.BeginningQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.AddedQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.AddedQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.TotalAvailableQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.TotalAvailableQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.AdjustmentQuantity,
opt => opt.MapFrom(i =>
negative(i.AdjustmentQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.DistributedQuantity,
opt => opt.MapFrom(i =>
hideEmptyCases(i.DistributedQuantity, i.InventoryType.UnitsPerCase)))
.ForMember(d => d.EndingQuantity,
opt => opt.MapFrom(i =>
formatCases(i.EndingQuantity, i.InventoryType.UnitsPerCase)));
}
}
}
@@ -82,6 +84,13 @@ namespace InventoryTraker.Web.Utilities
}
}
private readonly IMapper _mapper;
public MovementReportWriter(IMapper mapper)
{
_mapper = mapper;
}
public byte[] Write(MovementReport report)
{
using (var stream = new MemoryStream())
@@ -104,7 +113,7 @@ namespace InventoryTraker.Web.Utilities
writer.WriteField<string>($"Month: {report.Month:MMMM yyyy}");
writer.NextRecord();
var items =
Mapper.Map<IEnumerable<MovementReportItem>, IEnumerable<MovementReportExportItem>>
_mapper.Map<IEnumerable<MovementReportItem>, IEnumerable<MovementReportExportItem>>
(report.Items)
.OrderBy(i => i.Name);
writer.WriteRecords(items);
+2 -14
View File
@@ -5,7 +5,7 @@
ViewBag.Title = "Your Profile";
}
<h1 class="page-header">Update Your Profile</h1>
<h1 class="page-header">Update @ViewBag.Title</h1>
<form novalidate
name="vm.form"
ng-controller="EditProfileController as vm"
@@ -35,16 +35,4 @@
</div>
</fieldset>
</form>
@section Scripts
{
<script>
var url = '@(Html.BuildUrlFromExpression<ProfileController>(c => c.Update(null)))';
window.app.constant('editProfileConfig', {
saveUrl: url
});
window.app.constant('model', @Html.JsonFor(Model));
</script>
}
</form>
+4
View File
@@ -82,6 +82,10 @@
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.1.1.0" newVersion="5.1.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
@@ -2,7 +2,7 @@
'use strict';
window.app.controller('EditProfileController',
function($http, editProfileConfig, model) {
function($http, model) {
var vm = this;
vm.profile = model;
@@ -13,7 +13,7 @@
vm.errorMessage = null;
vm.success = false;
$http.post(editProfileConfig.saveUrl, vm.profile)
$http.post("/Profile/Update", vm.profile)
.success(function() {
vm.success = true;
})
+1 -2
View File
@@ -6,7 +6,7 @@
<package id="angular-strap" version="2.3.1" targetFramework="net451" />
<package id="angular-ui-grid" version="3.1.1" targetFramework="net451" />
<package id="Antlr" version="3.5.0.2" targetFramework="net451" />
<package id="AutoMapper" version="4.2.0" targetFramework="net451" />
<package id="AutoMapper" version="5.1.1" targetFramework="net451" />
<package id="bootstrap" version="3.3.7" targetFramework="net451" />
<package id="ClosedXML" version="0.76.0" targetFramework="net451" />
<package id="CsvHelper" version="2.16.3.0" targetFramework="net451" />
@@ -15,7 +15,6 @@
<package id="EntityFramework" version="6.1.3" targetFramework="net451" />
<package id="filesaver" version="1.1.20151003" targetFramework="net451" />
<package id="FontAwesome" version="4.6.3" targetFramework="net451" />
<package id="Heroic.AutoMapper" version="2.0.0" targetFramework="net451" />
<package id="Heroic.Web.IoC" version="4.1.2" targetFramework="net451" />
<package id="HtmlTags" version="3.0.0.186" targetFramework="net451" />
<package id="Humanizer" version="1.33.7" targetFramework="net451" />