예제 #1
0
        private static void AddProduct(Product product, Dictionary<string, List<string>> productDetails)
        {
            try
            {
                using (var context = new OleDbDataContext())
                {
                    context.Products.InsertOnSubmit(product);
                    context.SubmitChanges();

                    var p = GetProductByName(product.ProductName);

                    foreach (var key in productDetails.Keys)
                    {
                        // Jeżeli brak pojemności dla produktu nie tworzy wpisu
                        if (String.IsNullOrEmpty(key))
                        {
                            break;
                        }

                        foreach (var lang in productDetails[key])
                        {
                            // Jeżeli brak langów dla pojemności nie tworzy wpisu
                            if (String.IsNullOrEmpty(lang))
                            {
                                break;
                            }

                            var lv = new Language()
                            {
                                Lang = lang,
                                Volume = key,
                                ProductId = p.Id
                            };

                            context.Languages.InsertOnSubmit(lv);
                            context.SubmitChanges();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #2
0
 partial void DeleteProduct(Product instance);
예제 #3
0
 partial void UpdateProduct(Product instance);
예제 #4
0
 partial void InsertProduct(Product instance);
예제 #5
0
        private static void UpdateProduct(Product product, Dictionary<string, List<string>> productDetails)
        {
            try
            {
                using (var context = new OleDbDataContext())
                {

                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #6
0
        static void Main(string[] args)
        {
            DataTable sheetData = ReadExcelFile("Arkusz1", @"D:\Zeszyt1.xls");
            RecordState state = RecordState.None;

            //Wybranie nazw wszystkich produktów z arkusza
            List<string> productNames = (from DataRow row in sheetData.Rows
                                         select row["Nazwa"].ToString()).Distinct().ToList();

            Dictionary<string, Dictionary<string, List<string>>> collectionData = new Dictionary<string, Dictionary<string, List<string>>>();

            foreach (var name in productNames)
            {
                Dictionary<string, List<string>> productNewDetails = new Dictionary<string, List<string>>();

                //Pobranie wszystkich produktów z arkusza
                var nameOccurs = (from DataRow row in sheetData.Rows
                                  where row["Nazwa"].ToString() == name
                                  select row).ToArray();

                foreach (var item in nameOccurs)
                {
                    //Utworzenie kolekcji [pojemnosc] - [lista jezyków] dla danego produktu
                    if (!String.IsNullOrEmpty(item[1].ToString()) && !String.IsNullOrEmpty(item[2].ToString()))
                    {
                        productNewDetails.Add(item[1].ToString(), item[2].ToString().Split(',').Select(s => s.Trim()).ToList());
                    }
                }

                //Utworzenie kolekcji [produkt] - [lista pojemnosci] - [listy języków]
                collectionData.Add(name, productNewDetails);
            }

            foreach (var key in collectionData.Keys)
            {
                state = RecordState.None;

                var product = GetProductByName(key);

                if (product == null)
                {
                    //Jeżeli produkt jest nowy
                    state = RecordState.New;
                }
                else
                {
                    //Jeżeli produkt istnieje w bazie
                    //Pobranie szczegółów o pojemnościach i językach danego produktu
                    var productOldDetails = GetProductDetails(product.Id);

                    //Wyodrębnienie pojemności
                    var oldVolumes = productOldDetails.Select(o => o.Volume).Distinct();

                    //Sprawdzenie czy zaszły zmiany w pojemnościach
                    state = collectionData[key].Keys.Intersect(oldVolumes).Count() == oldVolumes.Count() ? RecordState.None : RecordState.HasChanges;

                    foreach (var innerDict in collectionData[key])
                    {
                        //Sprawdzenie statusu, jeśli status = HasChanges zaprzestanie sprawdzania w celu uniknięcia nadpisania statusu w przypadku braku zmian w innym rekordzie
                        if (state == RecordState.HasChanges)
                        {
                            break;
                        }

                        //Wyodrębnienie języków danej pojemności [innerDict_Key.Key]
                        var oldLangs = productOldDetails.Where(o => o.Volume == innerDict.Key).Select(o => o.Lang).ToList();

                        //Sprawdzenie czy zaszły zmiany w produkcie (porównanie liczby, pod warunkiem, że Value[0] nie jest pustym stringiem - pusty string oznacza pustą komórkę excel)
                        if (state != RecordState.HasChanges && !String.IsNullOrEmpty(innerDict.Value[0]))
                        {
                            state = (oldLangs.Count != innerDict.Value.Count) ? RecordState.HasChanges : RecordState.None;
                        }

                        //Jeżeli nie wykazano zmian porównanie zawartości
                        if (state != RecordState.HasChanges && !String.IsNullOrEmpty(innerDict.Value[0]))
                        {
                            state = innerDict.Value.Intersect(oldLangs).Count() == oldLangs.Count ? RecordState.None : RecordState.HasChanges;
                        }
                    }
                }

                if (state == RecordState.New)
                {
                    product = new Product()
                    {
                        ProductName = key,
                        IsLastVersion = true,
                        Version = 1,
                        VersionPublishet = 1,
                    };

                    AddProduct(product, collectionData[key]);
                }
                else if (state == RecordState.HasChanges)
                {
                    Product p = GetProductByName(key);

                    product = new Product()
                    {
                        ProductName = key,
                        IsLastVersion = true,
                        Version = ++p.Version,
                        VersionPublishet = ++p.VersionPublishet,
                    };

                    //Tutaj zaktualizować wczesniejsze rekordy (pola IsLastVersion oraz PublishedVersion)
                    p.IsLastVersion = false;
                    p.VersionPublishet = product.VersionPublishet;

                    AddProduct(product, collectionData[key]);
                }
                else
                {

                }
            }

            Console.ReadKey();
        }