public SizeRangeViewModel MapToViewModel(SizeRange model)
        {
            SizeRangeViewModel viewModel = new SizeRangeViewModel();

            viewModel.RelatedSizes = new List <RelatedSizeViewModel>();
            PropertyCopier <SizeRange, SizeRangeViewModel> .Copy(model, viewModel);

            foreach (RelatedSize relatedSize in model.RelatedSizes)
            {
                RelatedSizeViewModel relatedSizeVM = new RelatedSizeViewModel();
                PropertyCopier <RelatedSize, RelatedSizeViewModel> .Copy(relatedSize, relatedSizeVM);

                SizeViewModel sizeVM = new SizeViewModel();
                PropertyCopier <Size, SizeViewModel> .Copy(relatedSize.Size, sizeVM);

                relatedSizeVM.Size = sizeVM;
                viewModel.RelatedSizes.Add(relatedSizeVM);
            }
            return(viewModel);
        }
        public CostCalculationRetailViewModel MapToViewModel(CostCalculationRetail model)
        {
            CostCalculationRetailViewModel viewModel = new CostCalculationRetailViewModel();

            PropertyCopier <CostCalculationRetail, CostCalculationRetailViewModel> .Copy(model, viewModel);

            viewModel.Style      = new ArticleStyleViewModel();
            viewModel.Style._id  = model.StyleId;
            viewModel.Style.name = model.StyleName;

            viewModel.Season      = new ArticleSeasonViewModel();
            viewModel.Season._id  = model.SeasonId;
            viewModel.Season.name = model.SeasonName;

            viewModel.Buyer      = new BuyerViewModel();
            viewModel.Buyer.Id   = model.BuyerId;
            viewModel.Buyer.Name = model.BuyerName;

            viewModel.SizeRange      = new SizeRangeViewModel();
            viewModel.SizeRange.Id   = model.SizeRangeId;
            viewModel.SizeRange.Name = model.SizeRangeName;

            viewModel.FabricAllowance      = Percentage.ToPercent(model.FabricAllowance);
            viewModel.AccessoriesAllowance = Percentage.ToPercent(model.AccessoriesAllowance);

            try
            {
                // Get Related Size of particular Size Range if possible
                viewModel.SizeRange.RelatedSizes = new List <RelatedSizeViewModel>();
                Task <SizeRange> sizeRange = this.SizeRangeService.ReadModelById(model.SizeRangeId);
                sizeRange.Wait();
                foreach (RelatedSize rs in sizeRange.Result.RelatedSizes)
                {
                    RelatedSizeViewModel relatedSizeVM = new RelatedSizeViewModel();
                    PropertyCopier <RelatedSize, RelatedSizeViewModel> .Copy(rs, relatedSizeVM);

                    SizeViewModel sizeVM = new SizeViewModel();
                    PropertyCopier <Size, SizeViewModel> .Copy(rs.Size, sizeVM);

                    relatedSizeVM.Size = sizeVM;
                    viewModel.SizeRange.RelatedSizes.Add(relatedSizeVM);
                }
            }
            catch (Exception)
            {
                // If cannot get Related Size, do nothing
            }

            viewModel.Counter      = new ArticleCounterViewModel();
            viewModel.Counter._id  = model.CounterId;
            viewModel.Counter.name = model.CounterName;

            viewModel.Efficiency       = new EfficiencyViewModel();
            viewModel.Efficiency.Id    = model.EfficiencyId;
            viewModel.Efficiency.Value = model.EfficiencyValue;

            viewModel.Risk = Percentage.ToPercent(model.Risk);

            viewModel.OL                 = new RateCalculatedViewModel();
            viewModel.OL.Id              = model.OLId;
            viewModel.OL.Value           = model.OLRate;
            viewModel.OL.CalculatedValue = model.OLCalculatedRate;

            viewModel.OTL1                 = new RateCalculatedViewModel();
            viewModel.OTL1.Id              = model.OTL1Id;
            viewModel.OTL1.Value           = model.OTL1Rate;
            viewModel.OTL1.CalculatedValue = model.OTL1CalculatedRate;

            viewModel.OTL2                 = new RateCalculatedViewModel();
            viewModel.OTL2.Id              = model.OTL2Id;
            viewModel.OTL2.Value           = model.OTL2Rate;
            viewModel.OTL2.CalculatedValue = model.OTL2CalculatedRate;

            viewModel.OTL3                 = new RateCalculatedViewModel();
            viewModel.OTL3.Id              = model.OTL3Id;
            viewModel.OTL3.Value           = model.OTL3Rate;
            viewModel.OTL3.CalculatedValue = model.OTL3CalculatedRate;

            viewModel.CostCalculationRetail_Materials = new List <CostCalculationRetail_MaterialViewModel>();

            if (model.CostCalculationRetail_Materials != null)
            {
                foreach (CostCalculationRetail_Material costCalculationRetail_Material in model.CostCalculationRetail_Materials)
                {
                    CostCalculationRetail_MaterialViewModel costCalculationRetail_MaterialVM = new CostCalculationRetail_MaterialViewModel();
                    PropertyCopier <CostCalculationRetail_Material, CostCalculationRetail_MaterialViewModel> .Copy(costCalculationRetail_Material, costCalculationRetail_MaterialVM);

                    CategoryViewModel categoryVM = new CategoryViewModel()
                    {
                        Id = costCalculationRetail_Material.CategoryId
                    };
                    string[] names = costCalculationRetail_Material.CategoryName.Split(new[] { " - " }, StringSplitOptions.None);
                    categoryVM.Name = names[0];
                    try
                    {
                        categoryVM.SubCategory = names[1];
                    }
                    catch (IndexOutOfRangeException)
                    {
                        categoryVM.SubCategory = null;
                    }

                    costCalculationRetail_MaterialVM.Category = categoryVM;
                    MaterialViewModel materialVM = new MaterialViewModel()
                    {
                        Id   = costCalculationRetail_Material.MaterialId,
                        Name = costCalculationRetail_Material.MaterialName
                    };
                    costCalculationRetail_MaterialVM.Material = materialVM;

                    UOMViewModel uomQuantityVM = new UOMViewModel()
                    {
                        Id   = costCalculationRetail_Material.UOMQuantityId,
                        Name = costCalculationRetail_Material.UOMQuantityName
                    };
                    costCalculationRetail_MaterialVM.UOMQuantity = uomQuantityVM;

                    UOMViewModel uomPriceVM = new UOMViewModel()
                    {
                        Id   = costCalculationRetail_Material.UOMPriceId,
                        Name = costCalculationRetail_Material.UOMPriceName
                    };
                    costCalculationRetail_MaterialVM.UOMPrice = uomPriceVM;

                    viewModel.CostCalculationRetail_Materials.Add(costCalculationRetail_MaterialVM);
                }
            }

            return(viewModel);
        }