public override EditDataDTO GetData(int id, out Notification notification)
        {
            DTO.EditDataDTO editData = new EditDataDTO();
            editData.Data = new SpecificationOfProductDTO();
            editData.Data.specificationCushionImageDTOs = new List <SpecificationCushionImageDTO>();
            editData.Data.specificationImageDTOs        = new List <SpecificationImageDTO>();
            editData.Data.specificationPackingDTOs      = new List <SpecificationPackingDTO>();
            editData.Data.specificationWeavingFileDTOs  = new List <SpecificationWeavingFileDTO>();
            editData.Data.specificationWoodenartDTOs    = new List <SpecificationWoodenartDTO>();
            editData.Data.packingSpecificationDTOs      = new List <PackingSpecificationDTO>();

            notification = new Notification()
            {
                Type = NotificationType.Success
            };

            try
            {
                using (var context = CreateContext())
                {
                    if (id > 0)
                    {
                        SpecificationOfProductMng_SpecificationOfProduct_View dbItem;
                        dbItem = context.SpecificationOfProductMng_SpecificationOfProduct_View
                                 .Include("SpecificationOfProductMng_SpecificationCushionImage_view")
                                 .Include("SpecificationOfProductMng_SpecificationImage_View")
                                 .Include("SpecificationOfProductMng_SpecificationPacking_View")
                                 .Include("SpecificationOfProductMng_SpecificationWeavingFile_View")
                                 .Include("SpecificationOfProductMng_SpecificationWoodenPart_View").FirstOrDefault(o => o.ProductSpecificationID == id);

                        var cItem = context.SpecificationOfProductMng_ClientOfProduct_View.Where(o => o.ProductID == dbItem.ProductID);
                        editData.Data.clientOfProductDTOs = converter.DB2DTO_ClientOfProduct(cItem.ToList());
                    }
                    editData.Data.packingSpecificationDTOs = converter.DB2DTO_GetPacking(context.SpecificationOfProductMng_PackingSpecification_View.ToList());
                }
                return(editData);
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                notification.DetailMessage.Add(ex.Message);
                if (ex.GetBaseException() != null)
                {
                    notification.DetailMessage.Add(ex.GetBaseException().Message);
                }
                return(editData);
            }
        }
        public DTO.EditDataDTO GetDataSpecification(int userId, int id, int?sampleProductID, int?productID, out Notification notification)
        {
            DTO.EditDataDTO editData = new EditDataDTO();
            editData.Data = new SpecificationOfProductDTO();
            editData.Data.specificationCushionImageDTOs = new List <SpecificationCushionImageDTO>();
            editData.Data.specificationImageDTOs        = new List <SpecificationImageDTO>();
            editData.Data.specificationPackingDTOs      = new List <SpecificationPackingDTO>();
            editData.Data.specificationWeavingFileDTOs  = new List <SpecificationWeavingFileDTO>();
            editData.Data.specificationWoodenartDTOs    = new List <SpecificationWoodenartDTO>();
            editData.Data.packingSpecificationDTOs      = new List <PackingSpecificationDTO>();
            editData.Data.clientOfProductDTOs           = new List <ClientOfProductDTO>();

            notification = new Notification()
            {
                Type = NotificationType.Success
            };

            try
            {
                using (var context = CreateContext())
                {
                    if (id > 0)
                    {
                        SpecificationOfProductMng_SpecificationOfProduct_View dbItem;
                        dbItem = context.SpecificationOfProductMng_SpecificationOfProduct_View
                                 .Include("SpecificationOfProductMng_SpecificationCushionImage_view")
                                 .Include("SpecificationOfProductMng_SpecificationImage_View")
                                 .Include("SpecificationOfProductMng_SpecificationPacking_View")
                                 .Include("SpecificationOfProductMng_SpecificationWeavingFile_View")
                                 .Include("SpecificationOfProductMng_SpecificationWoodenPart_View").FirstOrDefault(o => o.ProductSpecificationID == id);

                        editData.Data = converter.DB2DTO_GetDataSpecificationOfProduct(dbItem);

                        var cItem = context.SpecificationOfProductMng_ClientOfProduct_View.Where(o => o.ProductID == editData.Data.ProductID);
                        editData.Data.clientOfProductDTOs = converter.DB2DTO_ClientOfProduct(cItem.ToList());
                    }
                    else
                    {
                        // Create specification wooden part
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 1, ProductSpecificationWoodenPartID = -1, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 2, ProductSpecificationWoodenPartID = -2, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 3, ProductSpecificationWoodenPartID = -3, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 4, ProductSpecificationWoodenPartID = -4, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 5, ProductSpecificationWoodenPartID = -5, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });
                        editData.Data.specificationWoodenartDTOs.Add(new SpecificationWoodenartDTO()
                        {
                            RowIndex = 6, ProductSpecificationWoodenPartID = -6, DimensionH = null, DimensionW = null, DimensionL = null, ProductSpecificationID = null, Weight = null
                        });

                        editData.Data.specificationPackingDTOs = converter.DB2DTO_GetPacking2(context.SpecificationOfProductMng_PackingSpecification_View.ToList());

                        if (sampleProductID != null)
                        {
                            var dbSample = context.SpecificationOfProductMng_SampleProduct_View.FirstOrDefault(o => o.SampleProductID == sampleProductID);

                            editData.Data.SampleProductID    = dbSample.SampleProductID;
                            editData.Data.ProductUD          = dbSample.SampleProductUD;
                            editData.Data.ArticleDescription = dbSample.ArticleDescription;
                            editData.Data.ClientUD           = dbSample.ClientUD;
                            editData.Data.FactoryID          = dbSample.VNSuggestedFactoryID;
                            editData.Data.ClientID           = dbSample.ClientID;
                            editData.Data.ModelID            = dbSample.ModelID;
                        }

                        if (productID != null)
                        {
                            var dbProduct = context.SpecificationOfProductMng_Product_View.FirstOrDefault(o => o.ProductID == productID);

                            editData.Data.ProductID            = dbProduct.ProductID;
                            editData.Data.ProductUD            = dbProduct.ProductUD;
                            editData.Data.ModelID              = dbProduct.ModelID;
                            editData.Data.ArticleDescription   = dbProduct.ArticleDescription;
                            editData.Data.ProductOverallDimH   = dbProduct.ProductOverallDimH;
                            editData.Data.ProductOverallDimL   = dbProduct.ProductOverallDimL;
                            editData.Data.ProductOverallDimW   = dbProduct.ProductOverallDimW;
                            editData.Data.ProductOverallWeight = dbProduct.ProductOverallWeight;
                            editData.Data.FrameMaterial        = dbProduct.MaterialNM;
                            editData.Data.CushionColor         = dbProduct.CushionColor;
                            editData.Data.WickerColor          = dbProduct.WickerColor;
                            editData.Data.WickerType           = dbProduct.WickerType;

                            var iItem = context.SpecificationOfProductMng_Product_View.Where(o => o.ProductID == dbProduct.ProductID);
                            editData.Data.specificationImageDTOs = converter.DB2DTO_FromProductImage(iItem.ToList());


                            var cItem = context.SpecificationOfProductMng_ClientOfProduct_View.Where(o => o.ProductID == dbProduct.ProductID);
                            editData.Data.clientOfProductDTOs = converter.DB2DTO_ClientOfProduct(cItem.ToList());
                        }
                    }
                }
                return(editData);
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                notification.DetailMessage.Add(ex.Message);
                if (ex.GetBaseException() != null)
                {
                    notification.DetailMessage.Add(ex.GetBaseException().Message);
                }
                return(editData);
            }
        }