Esempio n. 1
0
        public override bool UpdateData(int userId, int id, ref object dtoItem, out Library.DTO.Notification notification)
        {
            DTO.Factory dtoFactory = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.Factory>();
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            try
            {
                using (FactoryMng2Entities context = CreateContext())
                {
                    Factory dbItem = null;
                    if (id == 0)
                    {
                        dbItem = new Factory();
                        context.Factory.Add(dbItem);
                    }
                    else
                    {
                        dbItem = context.Factory.FirstOrDefault(o => o.FactoryID == id);
                    }

                    if (dbItem == null)
                    {
                        notification.Message = "Factory not found!";
                        return(false);
                    }
                    else
                    {
                        // check concurrency
                        if (dbItem.ConcurrencyFlag != null && !dbItem.ConcurrencyFlag.SequenceEqual(Convert.FromBase64String(dtoFactory.ConcurrencyFlag_String)))
                        {
                            throw new Exception(Library.Helper.TEXT_CONCURRENCY_CONFLICT);
                        }

                        // process image
                        foreach (DTO.FactoryImage dtoImage in dtoFactory.FactoryImages)
                        {
                            if (dtoImage.HasChange)
                            {
                                dtoImage.FileUD = fwFactory.CreateFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoImage.NewFile, dtoImage.FileUD);
                            }
                        }

                        // Process business card image
                        foreach (DTO.FactoryBusinessCard dtoCard in dtoFactory.FactoryBusinessCard)
                        {
                            if (dtoCard.FrontHasChange)
                            {
                                dtoCard.FrontFileUD = fwFactory.CreateFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoCard.FrontNewFile, dtoCard.FrontFileUD);
                            }

                            if (dtoCard.BehindHasChange)
                            {
                                dtoCard.BehindFileUD = fwFactory.CreateFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoCard.BehindNewFile, dtoCard.BehindFileUD);
                            }
                        }

                        // processing certificate file
                        foreach (DTO.FactoryCertificate dtoCertificate in dtoFactory.FactoryCertificates)
                        {
                            if (dtoCertificate.CertificateFileHasChange)
                            {
                                if (string.IsNullOrEmpty(dtoCertificate.NewCertificateFile))
                                {
                                    fwFactory.RemoveImageFile(dtoCertificate.CertificateFile);
                                }
                                else
                                {
                                    dtoCertificate.CertificateFile = fwFactory.CreateNoneImageFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoCertificate.NewCertificateFile, dtoCertificate.CertificateFile);
                                }
                            }
                        }

                        // remove Technical Image
                        foreach (FactoryImage dbImage in context.FactoryImage.Local.Where(o => o.Factory == null).ToList())
                        {
                            if (!string.IsNullOrEmpty(dbImage.FileUD))
                            {
                                fwFactory.RemoveImageFile(dbImage.FileUD);
                            }
                        }

                        // processing image
                        if (dtoFactory.LogoImage_HasChange)
                        {
                            dtoFactory.LogoImage = fwFactory.CreateFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoFactory.LogoImage_NewFile, dtoFactory.LogoImage);
                        }

                        if (dtoFactory.FactoryGalleries != null)
                        {
                            // Pre-event update FactoryGallery
                            foreach (DTO.FactoryGalleryDTO dtoFactoryGallery in dtoFactory.FactoryGalleries.Where(o => o.FactoryGalleryHasChange))
                            {
                                dtoFactoryGallery.FactoryGalleryUD = fwFactory.CreateNoneImageFilePointer(this._tempFolder, dtoFactoryGallery.FactoryGalleryNewFile, dtoFactoryGallery.FactoryGalleryUD);
                            }
                        }

                        //foreach (DTO.FactoryDocumentDTO dtoDocumentFile in dtoFactory.factoryDocuments)
                        //{
                        //    if (dtoDocumentFile.FactoryDocumentHasChange)
                        //    {
                        //        if (string.IsNullOrEmpty(dtoDocumentFile.FactoryDocumentNewFile))
                        //        {
                        //            fwFactory.RemoveFile(dtoDocumentFile.FactoryDocumentFile);
                        //        }
                        //        else
                        //        {
                        //            dtoDocumentFile.FactoryDocumentFile = fwFactory.CreateNoneImageFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoDocumentFile.FactoryDocumentNewFile, dtoDocumentFile.FactoryDocumentFile, dtoDocumentFile.FriendlyName);
                        //        }
                        //    }
                        //}

                        converter.DTO2BD(dtoFactory, ref dbItem, userId);

                        //
                        //remove orphan item
                        //

                        // FactoryImage
                        context.FactoryImage.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryImage.Remove(o));

                        // FactoryBusinessCard
                        context.FactoryBusinessCard.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryBusinessCard.Remove(o));

                        // FactoryDirector
                        context.FactoryDirector.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryDirector.Remove(o));

                        // FactoryManager
                        context.FactoryManager.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryManager.Remove(o));

                        // FactoryPricing
                        context.FactoryPricing.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryPricing.Remove(o));

                        // FactoryResponsiblePerson
                        context.FactoryResponsiblePerson.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryResponsiblePerson.Remove(o));

                        // SampleTechnical
                        context.FactorySampleTechnical.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactorySampleTechnical.Remove(o));

                        // FactorySupplier
                        //context.FactoryRawMaterialSupplier.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryRawMaterialSupplier.Remove(o));
                        context.FactorySupplier.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactorySupplier.Remove(o));

                        // FactoryInHouseTest
                        context.FactoryInHouseTest.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryInHouseTest.Remove(o));

                        // FactoryCertificate
                        context.FactoryCertificate.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryCertificate.Remove(o));

                        //FactoryCapacity By Weeks
                        context.FactoryCapacity.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryCapacity.Remove(o));

                        //FactoryContactQuickInfo
                        context.FactoryContactQuickInfo.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryContactQuickInfo.Remove(o));

                        //FactoryProductGroup
                        context.FactoryProductGroup.Local.Where(o => o.Factory == null).ToList().ForEach(o => context.FactoryProductGroup.Remove(o));

                        dbItem.UpdatedDate = DateTime.Now;
                        dbItem.UpdatedBy   = userId;

                        // FactoryGallery for Factory(remove value Factory is null)
                        foreach (FactoryGallery dbFactoryGallery in context.FactoryGallery.Where(o => o.Factory == null).ToList())
                        {
                            fwFactory.RemoveImageFile(dbFactoryGallery.FactoryGalleryUD);
                            context.FactoryGallery.Remove(dbFactoryGallery);
                        }

                        context.SaveChanges();

                        //Update Permission Factory
                        if (id == 0)
                        {
                            context.Factory2Mng_function_AddFactoryPermissionNew(dbItem.FactoryID);
                            dtoItem = GetData(userId, dbItem.FactoryID, out notification).Data;
                        }
                        return(true);
                    }
                }
            }

            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                return(false);
            }
        }
Esempio n. 2
0
        public void DTO2BD(DTO.Factory dtoItem, ref Factory dbItem, int userId)
        {
            // FactoryImage
            if (dtoItem.FactoryImages != null)
            {
                foreach (var item in dbItem.FactoryImage.ToArray())
                {
                    if (!dtoItem.FactoryImages.Select(o => o.FactoryImageID).Contains(item.FactoryImageID))
                    {
                        dbItem.FactoryImage.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryImages)
                {
                    FactoryImage dbFactoryImage;
                    if (item.FactoryImageID <= 0)
                    {
                        dbFactoryImage = new FactoryImage();
                        dbItem.FactoryImage.Add(dbFactoryImage);
                    }
                    else
                    {
                        dbFactoryImage = dbItem.FactoryImage.FirstOrDefault(o => o.FactoryImageID == item.FactoryImageID);
                    }
                    if (dbFactoryImage != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryImage, FactoryImage>(item, dbFactoryImage);
                    }
                }
            }

            // Business Card
            if (dtoItem.FactoryBusinessCard != null)
            {
                foreach (var item in dbItem.FactoryBusinessCard.ToArray())
                {
                    if (!dtoItem.FactoryBusinessCard.Select(o => o.FactoryBusinessCardID).Contains(item.FactoryBusinessCardID))
                    {
                        dbItem.FactoryBusinessCard.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryBusinessCard)
                {
                    FactoryBusinessCard dbFactoryBusinessCard;
                    if (item.FactoryBusinessCardID <= 0)
                    {
                        dbFactoryBusinessCard = new FactoryBusinessCard();
                        dbItem.FactoryBusinessCard.Add(dbFactoryBusinessCard);
                    }
                    else
                    {
                        dbFactoryBusinessCard = dbItem.FactoryBusinessCard.FirstOrDefault(o => o.FactoryBusinessCardID == item.FactoryBusinessCardID);
                    }
                    if (dbFactoryBusinessCard != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryBusinessCard, FactoryBusinessCard>(item, dbFactoryBusinessCard);
                    }
                }
            }

            // FactoryDirector
            if (dtoItem.FactoryDirectors != null)
            {
                foreach (var item in dbItem.FactoryDirector.ToArray())
                {
                    if (!dtoItem.FactoryDirectors.Select(o => o.FactoryDirectorID).Contains(item.FactoryDirectorID))
                    {
                        dbItem.FactoryDirector.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryDirectors)
                {
                    FactoryDirector dbFactoryDirector;
                    if (item.FactoryDirectorID <= 0)
                    {
                        dbFactoryDirector = new FactoryDirector();
                        dbItem.FactoryDirector.Add(dbFactoryDirector);
                    }
                    else
                    {
                        dbFactoryDirector = dbItem.FactoryDirector.FirstOrDefault(o => o.FactoryDirectorID == item.FactoryDirectorID);
                    }
                    if (dbFactoryDirector != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryDirector, FactoryDirector>(item, dbFactoryDirector);
                    }
                }
            }

            // FactoryManager
            if (dtoItem.FactoryManagers != null)
            {
                foreach (var item in dbItem.FactoryManager.ToArray())
                {
                    if (!dtoItem.FactoryManagers.Select(o => o.FactoryManagerID).Contains(item.FactoryManagerID))
                    {
                        dbItem.FactoryManager.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryManagers)
                {
                    FactoryManager dbFactoryManager;
                    if (item.FactoryManagerID <= 0)
                    {
                        dbFactoryManager = new FactoryManager();
                        dbItem.FactoryManager.Add(dbFactoryManager);
                    }
                    else
                    {
                        dbFactoryManager = dbItem.FactoryManager.FirstOrDefault(o => o.FactoryManagerID == item.FactoryManagerID);
                    }
                    if (dbFactoryManager != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryManager, FactoryManager>(item, dbFactoryManager);
                    }
                }
            }

            // FactoryPricing
            if (dtoItem.FactoryPricings != null)
            {
                foreach (var item in dbItem.FactoryPricing.ToArray())
                {
                    if (!dtoItem.FactoryPricings.Select(o => o.FactoryPricingID).Contains(item.FactoryPricingID))
                    {
                        dbItem.FactoryPricing.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryPricings)
                {
                    FactoryPricing dbFactoryPricing;
                    if (item.FactoryPricingID <= 0)
                    {
                        dbFactoryPricing = new FactoryPricing();
                        dbItem.FactoryPricing.Add(dbFactoryPricing);
                    }
                    else
                    {
                        dbFactoryPricing = dbItem.FactoryPricing.FirstOrDefault(o => o.FactoryPricingID == item.FactoryPricingID);
                    }
                    if (dbFactoryPricing != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryPricing, FactoryPricing>(item, dbFactoryPricing);
                    }
                }
            }

            // FactorySampleTechnical
            if (dtoItem.FactorySampleTechnicals != null)
            {
                foreach (var item in dbItem.FactorySampleTechnical.ToArray())
                {
                    if (!dtoItem.FactorySampleTechnicals.Select(o => o.FactorySampleTechnicalID).Contains(item.FactorySampleTechnicalID))
                    {
                        dbItem.FactorySampleTechnical.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactorySampleTechnicals)
                {
                    FactorySampleTechnical dbFactorySampleTechnical;
                    if (item.FactorySampleTechnicalID <= 0)
                    {
                        dbFactorySampleTechnical = new FactorySampleTechnical();
                        dbItem.FactorySampleTechnical.Add(dbFactorySampleTechnical);
                    }
                    else
                    {
                        dbFactorySampleTechnical = dbItem.FactorySampleTechnical.FirstOrDefault(o => o.FactorySampleTechnicalID == item.FactorySampleTechnicalID);
                    }
                    if (dbFactorySampleTechnical != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactorySampleTechnical, FactorySampleTechnical>(item, dbFactorySampleTechnical);
                    }
                }
            }

            // FactoryResponsiblePerson
            if (dtoItem.FactoryResponsiblePersons != null)
            {
                foreach (var item in dbItem.FactoryResponsiblePerson.ToArray())
                {
                    if (!dtoItem.FactoryResponsiblePersons.Select(o => o.FactoryResponsiblePersonID).Contains(item.FactoryResponsiblePersonID))
                    {
                        dbItem.FactoryResponsiblePerson.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryResponsiblePersons)
                {
                    FactoryResponsiblePerson dbFactoryResponsiblePerson;
                    if (item.FactoryResponsiblePersonID <= 0)
                    {
                        dbFactoryResponsiblePerson = new FactoryResponsiblePerson();
                        dbItem.FactoryResponsiblePerson.Add(dbFactoryResponsiblePerson);
                    }
                    else
                    {
                        dbFactoryResponsiblePerson = dbItem.FactoryResponsiblePerson.FirstOrDefault(o => o.FactoryResponsiblePersonID == item.FactoryResponsiblePersonID);
                    }
                    if (dbFactoryResponsiblePerson != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryResponsiblePerson, FactoryResponsiblePerson>(item, dbFactoryResponsiblePerson);
                    }
                }
            }

            // FactoryRawMaterialSupplier
            if (dtoItem.FactoryRawMaterialSuppliers != null)
            {
                foreach (var item in dbItem.FactoryRawMaterialSupplier.ToArray())
                {
                    if (!dtoItem.FactoryRawMaterialSuppliers.Select(o => o.FactoryRawMaterialSupplierID).Contains(item.FactoryRawMaterialSupplierID))
                    {
                        dbItem.FactoryRawMaterialSupplier.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryRawMaterialSuppliers)
                {
                    FactoryRawMaterialSupplier dbFactoryRawMaterialSupplier;
                    if (item.FactoryRawMaterialSupplierID <= 0)
                    {
                        dbFactoryRawMaterialSupplier = new FactoryRawMaterialSupplier();
                        dbItem.FactoryRawMaterialSupplier.Add(dbFactoryRawMaterialSupplier);
                    }
                    else
                    {
                        dbFactoryRawMaterialSupplier = dbItem.FactoryRawMaterialSupplier.FirstOrDefault(o => o.FactoryRawMaterialSupplierID == item.FactoryRawMaterialSupplierID);
                    }
                    if (dbFactoryRawMaterialSupplier != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryRawMaterialSupplier, FactoryRawMaterialSupplier>(item, dbFactoryRawMaterialSupplier);
                    }
                }
            }

            // FactoryInHouseTest
            if (dtoItem.FactoryInHouseTests != null)
            {
                foreach (var item in dbItem.FactoryInHouseTest.ToArray())
                {
                    if (!dtoItem.FactoryInHouseTests.Select(o => o.FactoryInHouseTestID).Contains(item.FactoryInHouseTestID))
                    {
                        dbItem.FactoryInHouseTest.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryInHouseTests)
                {
                    FactoryInHouseTest dbFactoryInHouseTest;
                    if (item.FactoryInHouseTestID <= 0)
                    {
                        dbFactoryInHouseTest = new FactoryInHouseTest();
                        dbItem.FactoryInHouseTest.Add(dbFactoryInHouseTest);
                    }
                    else
                    {
                        dbFactoryInHouseTest = dbItem.FactoryInHouseTest.FirstOrDefault(o => o.FactoryInHouseTestID == item.FactoryInHouseTestID);
                    }
                    if (dbFactoryInHouseTest != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryInHouseTest, FactoryInHouseTest>(item, dbFactoryInHouseTest);
                    }
                }
            }

            // FactoryCertificate
            if (dtoItem.FactoryCertificates != null)
            {
                foreach (var item in dbItem.FactoryCertificate.ToArray())
                {
                    if (!dtoItem.FactoryCertificates.Select(o => o.FactoryCertificateID).Contains(item.FactoryCertificateID))
                    {
                        dbItem.FactoryCertificate.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryCertificates)
                {
                    FactoryCertificate dbFactoryCertificate;
                    if (item.FactoryCertificateID <= 0)
                    {
                        dbFactoryCertificate = new FactoryCertificate();
                        dbItem.FactoryCertificate.Add(dbFactoryCertificate);
                    }
                    else
                    {
                        dbFactoryCertificate = dbItem.FactoryCertificate.FirstOrDefault(o => o.FactoryCertificateID == item.FactoryCertificateID);
                    }
                    if (dbFactoryCertificate != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryCertificate, FactoryCertificate>(item, dbFactoryCertificate);
                        dbFactoryCertificate.ValidUntil = item.ValidUntil.ConvertStringToDateTime(); //convert datetime to string
                    }
                }
            }

            // Factory Turnover
            if (dtoItem.FactoryTurnovers != null)
            {
                //map child row
                foreach (var item in dtoItem.FactoryTurnovers)
                {
                    FactoryTurnover dbFactoryTurnover;
                    if (item.FactoryTurnoverID <= 0)
                    {
                        dbFactoryTurnover = new FactoryTurnover();
                        dbItem.FactoryTurnover.Add(dbFactoryTurnover);
                    }
                    else
                    {
                        dbFactoryTurnover = dbItem.FactoryTurnover.FirstOrDefault(o => o.FactoryTurnoverID == item.FactoryTurnoverID);
                    }
                    if (dbFactoryTurnover != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryTurnover, FactoryTurnover>(item, dbFactoryTurnover);
                    }
                }
            }

            // Factory Expected Capacity
            if (dtoItem.FactoryExpectedCapacities != null)
            {
                //map child row
                foreach (var item in dtoItem.FactoryExpectedCapacities)
                {
                    FactoryExpectedCapacity dbFactoryExpectedCapacity;
                    if (item.FactoryExpectedCapacityID <= 0)
                    {
                        dbFactoryExpectedCapacity = new FactoryExpectedCapacity();
                        dbItem.FactoryExpectedCapacity.Add(dbFactoryExpectedCapacity);
                    }
                    else
                    {
                        dbFactoryExpectedCapacity = dbItem.FactoryExpectedCapacity.FirstOrDefault(o => o.FactoryExpectedCapacityID == item.FactoryExpectedCapacityID);
                    }
                    if (dbFactoryExpectedCapacity != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryExpectedCapacity, FactoryExpectedCapacity>(item, dbFactoryExpectedCapacity);
                    }
                }
            }

            // Factory Capacity By Weeks
            if (dtoItem.factoryCapacityByWeeks != null)
            {
                //map child row
                foreach (var item in dtoItem.factoryCapacityByWeeks)
                {
                    FactoryCapacity dbFactoryCapacity;
                    if (item.FactoryCapacityID <= 0 && item.Capacity != null)
                    {
                        dbFactoryCapacity = new FactoryCapacity();
                        dbItem.FactoryCapacity.Add(dbFactoryCapacity);
                    }
                    else
                    {
                        dbFactoryCapacity = dbItem.FactoryCapacity.FirstOrDefault(o => o.FactoryCapacityID == item.FactoryCapacityID);
                    }
                    if (dbFactoryCapacity != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryCapacityByWeek, FactoryCapacity>(item, dbFactoryCapacity);
                    }
                }
            }

            // FactorySupplier
            //if (dtoItem.FactorySuppliers != null)
            //{
            //    foreach (var item in dbItem.FactorySupplier.ToArray())
            //    {
            //        if (!dtoItem.FactorySuppliers.Select(o => o.FactorySupplierID).Contains(item.FactorySupplierID))
            //        {
            //            dbItem.FactorySupplier.Remove(item);
            //        }
            //    }
            //    //map child row
            //    foreach (var item in dtoItem.FactorySuppliers)
            //    {
            //        FactorySupplier dbFactorySupplier;
            //        if (item.FactorySupplierID <= 0)
            //        {
            //            dbFactorySupplier = new FactorySupplier();
            //            dbItem.FactorySupplier.Add(dbFactorySupplier);
            //        }
            //        else
            //        {
            //            dbFactorySupplier = dbItem.FactorySupplier.FirstOrDefault(o => o.FactorySupplierID == item.FactorySupplierID);
            //        }
            //        if (dbFactorySupplier != null)
            //        {
            //            AutoMapper.Mapper.Map<DTO.FactorySupplier, FactorySupplier>(item, dbFactorySupplier);
            //        }
            //    }
            //}

            // FactoryGallery for add video 360
            if (dtoItem.FactoryGalleries != null)
            {
                foreach (FactoryGallery dbFactoryGallery in dbItem.FactoryGallery.ToList())
                {
                    if (!dtoItem.FactoryGalleries.Select(s => s.FactoryGalleryID).Contains(dbFactoryGallery.FactoryGalleryID))
                    {
                        dbItem.FactoryGallery.Remove(dbFactoryGallery);
                    }
                }

                foreach (DTO.FactoryGalleryDTO dtoFactoryGallery in dtoItem.FactoryGalleries.ToList())
                {
                    FactoryGallery dbFactoryGallery;

                    if (dtoFactoryGallery.FactoryGalleryID <= 0)
                    {
                        dbFactoryGallery = new FactoryGallery();
                        dbItem.FactoryGallery.Add(dbFactoryGallery);
                    }
                    else
                    {
                        dbFactoryGallery = dbItem.FactoryGallery.FirstOrDefault(o => o.FactoryGalleryID == dtoFactoryGallery.FactoryGalleryID);
                    }

                    if (dbFactoryGallery != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryGalleryDTO, FactoryGallery>(dtoFactoryGallery, dbFactoryGallery);
                    }
                }
            }

            // Factory Document
            if (dtoItem.factoryDocuments != null)
            {
                foreach (FactoryDocument dbFactoryDocument in dbItem.FactoryDocument.ToList())
                {
                    if (!dtoItem.factoryDocuments.Select(s => s.FactoryDocmentID).Contains(dbFactoryDocument.FactoryDocmentID))
                    {
                        dbItem.FactoryDocument.Remove(dbFactoryDocument);
                    }
                }

                foreach (DTO.FactoryDocumentDTO dtoFactoryDocument in dtoItem.factoryDocuments.ToList())
                {
                    FactoryDocument dbFactoryDocument;
                    if (dtoFactoryDocument.FactoryDocmentID <= 0)
                    {
                        dbFactoryDocument = new FactoryDocument();
                        dbItem.FactoryDocument.Add(dbFactoryDocument);
                    }
                    else
                    {
                        dbFactoryDocument = dbItem.FactoryDocument.FirstOrDefault(o => o.FactoryDocmentID == dtoFactoryDocument.FactoryDocmentID);
                    }

                    if (dbFactoryDocument != null)
                    {
                        if (dtoFactoryDocument.FactoryDocumentHasChange)
                        {
                            dbFactoryDocument.FactoryDocumentFile = fwFactory.CreateNoneImageFilePointer(FrameworkSetting.Setting.AbsoluteUserTempFolder + userId.ToString() + @"\", dtoFactoryDocument.FactoryDocumentNewFile, dtoFactoryDocument.FactoryDocumentFile, dtoFactoryDocument.FriendlyName);
                        }
                        AutoMapper.Mapper.Map <DTO.FactoryDocumentDTO, FactoryDocument>(dtoFactoryDocument, dbFactoryDocument);
                    }
                }
            }


            // FactoryDirector
            FactoryContactQuickInfo dbFactoryContactQuickInfo;

            if (dtoItem.FactoryContactQuickInfos != null)
            {
                foreach (var item in dbItem.FactoryContactQuickInfo.ToArray())
                {
                    if (!dtoItem.FactoryContactQuickInfos.Select(o => o.FactoryContactQuickInfoID).Contains(item.FactoryContactQuickInfoID))
                    {
                        dbItem.FactoryContactQuickInfo.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryContactQuickInfos)
                {
                    if (item.FactoryContactQuickInfoID <= 0)
                    {
                        dbFactoryContactQuickInfo = new FactoryContactQuickInfo();
                        dbItem.FactoryContactQuickInfo.Add(dbFactoryContactQuickInfo);
                    }
                    else
                    {
                        dbFactoryContactQuickInfo = dbItem.FactoryContactQuickInfo.FirstOrDefault(o => o.FactoryContactQuickInfoID == item.FactoryContactQuickInfoID);
                    }
                    if (dbFactoryContactQuickInfo != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryContactQuickInfo, FactoryContactQuickInfo>(item, dbFactoryContactQuickInfo);
                    }
                }
            }

            // FactoryProductGroup
            if (dtoItem.FactoryProductGroupDTOs != null)
            {
                foreach (var item in dbItem.FactoryProductGroup.ToArray())
                {
                    if (!dtoItem.FactoryProductGroupDTOs.Select(o => o.FactoryProductGroupID).Contains(item.FactoryProductGroupID))
                    {
                        dbItem.FactoryProductGroup.Remove(item);
                    }
                }
                //map child row
                foreach (var item in dtoItem.FactoryProductGroupDTOs)
                {
                    FactoryProductGroup dbFactoryProductGroup;
                    if (item.FactoryProductGroupID <= 0)
                    {
                        dbFactoryProductGroup = new FactoryProductGroup();
                        dbItem.FactoryProductGroup.Add(dbFactoryProductGroup);
                    }
                    else
                    {
                        dbFactoryProductGroup = dbItem.FactoryProductGroup.FirstOrDefault(o => o.FactoryProductGroupID == item.FactoryProductGroupID);
                    }
                    if (dbFactoryProductGroup != null)
                    {
                        AutoMapper.Mapper.Map <DTO.FactoryProductGroupDTO, FactoryProductGroup>(item, dbFactoryProductGroup);
                    }
                }
            }

            AutoMapper.Mapper.Map <DTO.Factory, Factory>(dtoItem, dbItem);
            dbItem.UpdatedDate = dtoItem.UpdatedDate.ConvertStringToDateTime();
        }