public static async Task <DerivativeViewModel> GetModel(IDataContext context, DerivativeFilter derivativeFilter)
        {
            DerivativeViewModel model = null;

            if (derivativeFilter.Action == DerivativeAction.Delete || derivativeFilter.Action == DerivativeAction.Derivative)
            {
                model = await GetFullAndPartialViewModelForDerivative(context, derivativeFilter);
            }
            else if (derivativeFilter.Action == DerivativeAction.Derivatives)
            {
                model = await GetFullAndPartialViewModelForDerivatives(context, derivativeFilter);
            }
            else if (derivativeFilter.Action == DerivativeAction.OxoDerivatives)
            {
                model = GetFullAndPartialViewModelForOxoDerivatives(context, derivativeFilter);
            }
            else
            {
                model = GetFullAndPartialViewModel(context, derivativeFilter);
            }
            if (derivativeFilter.Action != DerivativeAction.NotSet)
            {
                model.IdentifierPrefix = Enum.GetName(derivativeFilter.Action.GetType(), derivativeFilter.Action);
            }

            return(model);
        }
 private static async Task<DerivativeViewModel> GetFullAndPartialViewModelForDerivative(IDataContext context,
                                                                                        DerivativeFilter filter)
 {
     var model = new DerivativeViewModel()
     {
         PageIndex = filter.PageIndex.HasValue ? filter.PageIndex.Value : 1,
         PageSize = filter.PageSize.HasValue ? filter.PageSize.Value : Int32.MaxValue,
         Configuration = context.ConfigurationSettings
     };
     var derivative = await context.Vehicle.GetFdpDerivative(filter);
     var programmeFilter = new ProgrammeFilter()
     {
         ProgrammeId = derivative.ProgrammeId,
         Gateway = derivative.Gateway
     };
     HydrateModelWithCommonProperties(model, context, programmeFilter);
     
     if (!(derivative is EmptyFdpDerivative))
     {
         derivative.Programme = model.Programmes.FirstOrDefault(p => p.Id == derivative.ProgrammeId.GetValueOrDefault());
         derivative.Body = model.Bodies.FirstOrDefault(b => b.Id == derivative.BodyId);
         derivative.Engine = model.Engines.FirstOrDefault(e => e.Id == derivative.EngineId);
         derivative.Transmission = model.Transmissions.FirstOrDefault(t => t.Id == derivative.TransmissionId);
     }
     model.Derivative = derivative;
    
     return model;
 }
        private static DerivativeViewModel GetFullAndPartialViewModelForOxoDerivatives(IDataContext context,
                                                                                       DerivativeFilter filter)
        {
            var baseModel = GetBaseModel(context);
            var model     = new DerivativeViewModel()
            {
                PageIndex      = filter.PageIndex ?? 1,
                PageSize       = filter.PageSize ?? int.MaxValue,
                Configuration  = context.ConfigurationSettings,
                CurrentUser    = baseModel.CurrentUser,
                CurrentVersion = baseModel.CurrentVersion
            };

            var programmeFilter = new ProgrammeFilter()
            {
                ProgrammeId = filter.ProgrammeId,
                Gateway     = filter.Gateway
            };

            HydrateModelWithCommonProperties(model, context, programmeFilter);

            model.OxoDerivatives = context.Vehicle.ListDerivatives(filter);

            return(model);
        }
        private static async Task <DerivativeViewModel> GetFullAndPartialViewModelForDerivative(IDataContext context,
                                                                                                DerivativeFilter filter)
        {
            var model = new DerivativeViewModel()
            {
                PageIndex     = filter.PageIndex.HasValue ? filter.PageIndex.Value : 1,
                PageSize      = filter.PageSize.HasValue ? filter.PageSize.Value : Int32.MaxValue,
                Configuration = context.ConfigurationSettings
            };
            var derivative = await context.Vehicle.GetFdpDerivative(filter);

            var programmeFilter = new ProgrammeFilter()
            {
                ProgrammeId = derivative.ProgrammeId,
                Gateway     = derivative.Gateway
            };

            HydrateModelWithCommonProperties(model, context, programmeFilter);

            if (!(derivative is EmptyFdpDerivative))
            {
                derivative.Programme    = model.Programmes.FirstOrDefault(p => p.Id == derivative.ProgrammeId.GetValueOrDefault());
                derivative.Body         = model.Bodies.FirstOrDefault(b => b.Id == derivative.BodyId);
                derivative.Engine       = model.Engines.FirstOrDefault(e => e.Id == derivative.EngineId);
                derivative.Transmission = model.Transmissions.FirstOrDefault(t => t.Id == derivative.TransmissionId);
            }
            model.Derivative = derivative;

            return(model);
        }
 private static void HydrateModelWithCommonProperties(DerivativeViewModel model, IDataContext context, ProgrammeFilter programmeFilter)
 {
     model.Programmes    = context.Vehicle.ListProgrammes(programmeFilter);
     model.Bodies        = context.Vehicle.ListBodies(programmeFilter);
     model.Engines       = context.Vehicle.ListEngines(programmeFilter);
     model.Transmissions = context.Vehicle.ListTransmissions(programmeFilter);
     model.Gateways      = model.Programmes.ListGateways();
     model.CarLines      = model.Programmes.ListCarLines();
     model.ModelYears    = model.Programmes.ListModelYears();
 }
        private static DerivativeViewModel GetFullAndPartialViewModel(IDataContext context,
                                                                      DerivativeFilter filter)
        {
            var model = new DerivativeViewModel(GetBaseModel(context))
            {
                Configuration = context.ConfigurationSettings,
            };
            HydrateModelWithCommonProperties(model, context);

            return model;
        }
        private static DerivativeViewModel GetFullAndPartialViewModel(IDataContext context,
                                                                      DerivativeFilter filter)
        {
            var model = new DerivativeViewModel(GetBaseModel(context))
            {
                Configuration = context.ConfigurationSettings,
            };

            HydrateModelWithCommonProperties(model, context);

            return(model);
        }
        private static async Task <DerivativeViewModel> GetFullAndPartialViewModelForDerivatives(IDataContext context,
                                                                                                 DerivativeFilter filter)
        {
            var baseModel = SharedModelBase.GetBaseModel(context);
            var model     = new DerivativeViewModel()
            {
                PageIndex      = filter.PageIndex.HasValue ? filter.PageIndex.Value : 1,
                PageSize       = filter.PageSize.HasValue ? filter.PageSize.Value : Int32.MaxValue,
                Configuration  = context.ConfigurationSettings,
                CurrentUser    = baseModel.CurrentUser,
                CurrentVersion = baseModel.CurrentVersion
            };

            var programmeFilter = new ProgrammeFilter()
            {
                ProgrammeId = filter.ProgrammeId,
                Gateway     = filter.Gateway
            };

            HydrateModelWithCommonProperties(model, context, programmeFilter);

            model.Derivatives = await context.Vehicle.ListFdpDerivatives(filter);

            model.TotalPages          = model.Derivatives.TotalPages;
            model.TotalRecords        = model.Derivatives.TotalRecords;
            model.TotalDisplayRecords = model.Derivatives.TotalDisplayRecords;

            foreach (var derivative in model.Derivatives.CurrentPage)
            {
                derivative.Programme    = model.Programmes.FirstOrDefault(p => p.Id == derivative.ProgrammeId.GetValueOrDefault());
                derivative.Body         = model.Bodies.FirstOrDefault(b => b.Id == derivative.BodyId);
                derivative.Engine       = model.Engines.FirstOrDefault(e => e.Id == derivative.EngineId);
                derivative.Transmission = model.Transmissions.FirstOrDefault(t => t.Id == derivative.TransmissionId);
            }

            return(model);
        }
 private static void HydrateModelWithCommonProperties(DerivativeViewModel model, IDataContext context)
 {
     HydrateModelWithCommonProperties(model, context, new ProgrammeFilter());
 }
 private static void HydrateModelWithCommonProperties(DerivativeViewModel model, IDataContext context, ProgrammeFilter programmeFilter)
 {
     model.Programmes = context.Vehicle.ListProgrammes(programmeFilter);
     model.Bodies = context.Vehicle.ListBodies(programmeFilter);
     model.Engines = context.Vehicle.ListEngines(programmeFilter);
     model.Transmissions = context.Vehicle.ListTransmissions(programmeFilter);
     model.Gateways = model.Programmes.ListGateways();
     model.CarLines = model.Programmes.ListCarLines();
     model.ModelYears = model.Programmes.ListModelYears();
 }
 private static void HydrateModelWithCommonProperties(DerivativeViewModel model, IDataContext context)
 {
     HydrateModelWithCommonProperties(model, context, new ProgrammeFilter());
 }
        private static DerivativeViewModel GetFullAndPartialViewModelForOxoDerivatives(IDataContext context,
            DerivativeFilter filter)
        {
            var baseModel = GetBaseModel(context);
            var model = new DerivativeViewModel()
            {
                PageIndex = filter.PageIndex ?? 1,
                PageSize = filter.PageSize ?? int.MaxValue,
                Configuration = context.ConfigurationSettings,
                CurrentUser = baseModel.CurrentUser,
                CurrentVersion = baseModel.CurrentVersion
            };

            var programmeFilter = new ProgrammeFilter()
            {
                ProgrammeId = filter.ProgrammeId,
                Gateway = filter.Gateway
            };
            HydrateModelWithCommonProperties(model, context, programmeFilter);

            model.OxoDerivatives = context.Vehicle.ListDerivatives(filter);

            return model;
        }
        private static async Task<DerivativeViewModel> GetFullAndPartialViewModelForDerivatives(IDataContext context,
                                                                                                DerivativeFilter filter)
        {
            var baseModel = SharedModelBase.GetBaseModel(context);
            var model = new DerivativeViewModel()
            {
                PageIndex = filter.PageIndex.HasValue ? filter.PageIndex.Value : 1,
                PageSize = filter.PageSize.HasValue ? filter.PageSize.Value : Int32.MaxValue,
                Configuration = context.ConfigurationSettings,
                CurrentUser = baseModel.CurrentUser,
                CurrentVersion = baseModel.CurrentVersion
            };

            var programmeFilter = new ProgrammeFilter() {
                ProgrammeId = filter.ProgrammeId,
                Gateway = filter.Gateway
            };
            HydrateModelWithCommonProperties(model, context, programmeFilter);

            model.Derivatives = await context.Vehicle.ListFdpDerivatives(filter);
            model.TotalPages = model.Derivatives.TotalPages;
            model.TotalRecords = model.Derivatives.TotalRecords;
            model.TotalDisplayRecords = model.Derivatives.TotalDisplayRecords;

            foreach (var derivative in model.Derivatives.CurrentPage)
            {
                derivative.Programme = model.Programmes.FirstOrDefault(p => p.Id == derivative.ProgrammeId.GetValueOrDefault());
                derivative.Body = model.Bodies.FirstOrDefault(b => b.Id == derivative.BodyId);
                derivative.Engine = model.Engines.FirstOrDefault(e => e.Id == derivative.EngineId);
                derivative.Transmission = model.Transmissions.FirstOrDefault(t => t.Id == derivative.TransmissionId);
            }

            return model;
        }