Example #1
0
        /// <summary>
        /// Метод закриває программу, обовязкова передача по ref !!! Так як метод закриває існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        public void ExitApp(ref AssistantContext db)
        {
            db.Dispose();
            Application app = Application.Current;

            app.Shutdown();
        }
 public override void LoadDataFromDatabase()
 {
     using (var ctx = new AssistantContext())
     {
         ctx.Appliances.Include(a => a.DataSheet).ToList().ForEach(Appliances.Add);
     }
 }
        private async void DropPackagedSolution(PackagedSolution packagedSolution)
        {
            using (var ctx = new AssistantContext())
            {
                var conflictingOffersList = ctx.Offers
                                            .Where(o => o.PackagedSolution.Id == packagedSolution.Id)
                                            .Include(o => o.OfferInformation)
                                            .ToList();

                if (conflictingOffersList.Any())
                {
                    var formattedOffersString = string.Join("\n", conflictingOffersList.Select(x => $"- {x.OfferInformation.Title} ({x.CreationDate})"));
                    await _dialogCoordinator.ShowMessageAsync(this, "Fejl",
                                                              $"Pakkeløsningen kan ikke slettes, da den findes i følgende tilbud:\n{formattedOffersString}");

                    return;
                }
            }

            // No conflicts, remove the packaged solution
            PackagedSolutions.Remove(packagedSolution);

            using (var ctx = new AssistantContext())
            {
                ctx.PackagedSolutions.Attach(packagedSolution);
                ctx.PackagedSolutions.Remove(packagedSolution);
                ctx.SaveChanges();
            }
        }
Example #4
0
        public LabelExportViewModel(PackagedSolution packaged)
        {
            using (var ctx = new AssistantContext())
            {
                var companyInfo = ctx.CompanyInformation.FirstOrDefault();
                if (companyInfo == null)
                {
                    throw new CompanyInformationNotFoundException("Ingen firmaoplysninger er indtastet.");
                }

                CompNameText = companyInfo.CompanyName;
            }

            switch (packaged.EnergyLabel.Count)
            {
            case 1: SetupLabelOne(packaged.EnergyLabel[0]); break;

            case 2: SetupLabelTwo(packaged.EnergyLabel); break;

            default: return;
            }

            SolarIncluded        = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.SolarPanel) ? "Visible" : "Hidden";
            WatertankIncluded    = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.Container) ? "Visible" : "Hidden";
            TempControleIncluded = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.TemperatureController) ? "Visible" : "Hidden";
            HeaterIncluded       = (packaged.EnergyLabel[0].SecondaryBoilerAFUE > 0 || packaged.EnergyLabel[0].SecondaryHeatPumpAFUE > 0) ? "Visible" : "Hidden";
        }
        private async void RunCreateApplianceDialog()
        {
            var       customDialog    = new CustomDialog();
            Appliance newAppliance    = new Appliance();
            var       dialogViewModel = new CreateApplianceDialogViewModel(newAppliance, true,
                                                                           closeHandler => _dialogCoordinator.HideMetroDialogAsync(this, customDialog), async completionHandler =>
            {
                newAppliance = completionHandler.NewAppliance;
                // Save to database
                using (var ctx = new AssistantContext())
                {
                    newAppliance.CreationDate = DateTime.Now;
                    ctx.Appliances.Add(newAppliance);
                    ctx.SaveChanges();
                }

                // Add to local list
                Appliances.Add(newAppliance);

                await _dialogCoordinator.HideMetroDialogAsync(this, customDialog);
                await _dialogCoordinator.ShowMessageAsync(this, "Succes", $"Komponentet {newAppliance.Name} blev gemt.");
            });

            customDialog.Content = new CreateApplianceDialogView {
                DataContext = dialogViewModel
            };

            await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
        }
        private async void RunEditApplianceDialog()
        {
            var customDialog = new CustomDialog();

            var dialogViewModel = new CreateApplianceDialogViewModel(SelectedAppliance, false,
                                                                     instanceCancel => _dialogCoordinator.HideMetroDialogAsync(this, customDialog),
                                                                     instanceCompleted =>
            {
                _dialogCoordinator.HideMetroDialogAsync(this, customDialog);
                FilteredCollectionView.Refresh();
                AppliancesInPackagedSolutionView.Refresh();

                // Update appliance changes in database
                using (var ctx = new AssistantContext())
                {
                    ctx.Entry(SelectedAppliance).State           = EntityState.Modified;
                    ctx.Entry(SelectedAppliance.DataSheet).State = EntityState.Modified;

                    ctx.SaveChanges();
                }
            });

            customDialog.Content = new CreateApplianceDialogView {
                DataContext = dialogViewModel
            };

            await _dialogCoordinator.ShowMetroDialogAsync(this, customDialog);
        }
Example #7
0
        private void SaveOfferToDatabase(Offer offer)
        {
            using (var ctx = new AssistantContext())
            {
                ctx.PackagedSolutions.Attach(offer.PackagedSolution);

                offer.Appliances = AppliancesInOffer.ToList();
                offer.Salaries   = SalariesInOffer.ToList();
                offer.Materials  = MaterialsInOffer.ToList();

                // Set existing unitprices to modified state
                foreach (var unit in offer.Appliances.Concat(offer.Salaries).Concat(offer.Materials).Where(u => u.Id != 0))
                {
                    ctx.Entry(unit).State = EntityState.Modified;
                }

                if (offer.Client.CreationDate == default(DateTime))
                {
                    offer.Client.CreationDate = DateTime.Now;
                }

                if (offer.CreationDate == default(DateTime))
                {
                    offer.CreationDate = DateTime.Now;
                }

                ctx.Entry(Offer).State = Offer.Id == 0 ? EntityState.Added : EntityState.Modified;

                ctx.SaveChanges();
            }
            IsDataSaved = true;
        }
        /// <summary>
        /// Drops an appliance from the database and removes it from the displayed list in the UI
        /// </summary>
        /// <param name="appliance"></param>
        private async void DropAppliance(Appliance appliance)
        {
            // Check if the appliance is used in any packaged solutions
            using (var ctx = new AssistantContext())
            {
                var conflictingSolutions = ctx.PackagedSolutions.Include(a => a.ApplianceInstances)
                                           .Where(s => s.ApplianceInstances.Any(a => a.Appliance.Id == appliance.Id))
                                           .ToList();
                if (conflictingSolutions.Count > 0)
                {
                    var formattedSolutionString = string.Join("\n", conflictingSolutions.Select(x => $"- {x.Name}"));
                    await _dialogCoordinator.ShowMessageAsync(this, "Fejl",
                                                              $"Komponentet kan ikke slettes, da det findes i følgende pakkeløsninger:\n{formattedSolutionString}");

                    return;
                }
            }

            // Remove from current solution
            foreach (var existingAppliance in AppliancesInPackagedSolution.Where(a => a.Appliance == appliance))
            {
                AppliancesInPackagedSolution.Remove(existingAppliance);
            }

            // Remove from visual list of appliances
            Appliances.Remove(appliance);

            // Remove from database
            using (var ctx = new AssistantContext())
            {
                ctx.Entry(appliance).State = EntityState.Deleted;

                ctx.SaveChanges();
            }
        }
 public void InitialDBTest()
 {
     new AssistantContext().Database.Delete();
     ctx = new AssistantContext();
     ctx.Offers.Add(off);
     ctx.SaveChanges();
     Assert.IsTrue(ctx.Offers.Any(o => o.Id == off.Id));
 }
Example #10
0
 public MainVM()
 {
     db = new AssistantContext();
     db.Books.Load();
     db.Topics.Load();
     db.Sections.Load();
     db.Examples.Load();
     Books = db.Books.Local.ToBindingList();
 }
        public void LoadDataFromDatabaseTest()
        {
            new AssistantContext().Database.Delete();
            ctx = new AssistantContext();

            ctx.PackagedSolutions.Add(testPack);
            ctx.SaveChanges();

            Assert.IsTrue(ctx.PackagedSolutions.Any(p => p.Id == testPack.Id));
        }
 public override void LoadDataFromDatabase()
 {
     using (var ctx = new AssistantContext())
     {
         ctx.PackagedSolutions
         .Include(p => p.ApplianceInstances.Select(a => a.Appliance.DataSheet))
         .ToList()
         .ForEach(PackagedSolutions.Add);
     }
 }
Example #13
0
        public void LoadDataFromDatabaseTest()
        {
            new AssistantContext().Database.Delete();
            ctx = new AssistantContext();
            ctx.Appliances.Add(app1);
            ctx.Appliances.Add(app2);
            ctx.SaveChanges();

            model.LoadDataFromDatabase();
            Assert.IsTrue(model.Appliances.Count != 0);
        }
Example #14
0
        public void LoadDataFromDatabase()
        {
            using (var ctx = new AssistantContext())
                CompanyInformation = ctx.CompanyInformation.FirstOrDefault();

            // Create new it does not exist
            if (CompanyInformation == null)
            {
                CompanyInformation = new CompanyInformation();
            }
        }
Example #15
0
        /// <summary>
        /// Метод створює нову Book, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        public void AddBook(ref AssistantContext db)
        {
            MessageView message = new MessageView("");

            if (message.ShowDialog() == true)
            {
                Book book = new Book();
                book.NameBook = message.Message;
                db.Books.Add(book);
                db.SaveChanges();
            }
        }
        /// <summary>
        /// Save the viewed packaged solution to the database
        /// </summary>
        private void SaveCurrentPackagedSolution()
        {
            /* IMPORTANT
             * A packaged solution should not be saved if there exists
             *  a solar collector without a container tied to it. */
            using (var ctx = new AssistantContext())
            {
                // Copy visible list of appliance instances to the list in the model
                var newApplianceInstanceList = AppliancesInPackagedSolution.ToList();

                // Mark packaged solution as added if new or modified if old
                ctx.Entry(PackagedSolution).State = PackagedSolution.Id == 0 ? EntityState.Added : EntityState.Modified;

                // Mark removed appliance instances as deleted
                if (PackagedSolution.Id > 0)
                {
                    var previousPackagedSolution = ctx.PackagedSolutions.Include(a => a.ApplianceInstances).FirstOrDefault(p => p.Id == PackagedSolution.Id);
                    previousPackagedSolution?.ApplianceInstances.ToList().ForEach(instance =>
                    {
                        if (newApplianceInstanceList.All(a => a.Id != instance.Id))
                        {
                            ctx.Entry(instance).State = EntityState.Deleted;
                        }
                    });
                }

                // Attach appliances and appliance instances to avoid duplicates
                foreach (var appInstance in newApplianceInstanceList)
                {
                    ctx.Entry(appInstance.Appliance.DataSheet).State = EntityState.Unchanged;
                    ctx.Entry(appInstance.Appliance).State           = EntityState.Unchanged;

                    ctx.Entry(appInstance).State = appInstance.Id == 0 ? EntityState.Added : EntityState.Unchanged;
                }

                // Set new appliance instance list
                PackagedSolution.ApplianceInstances = newApplianceInstanceList;

                // Set the creation date to now
                if (PackagedSolution.CreationDate == default(DateTime))
                {
                    PackagedSolution.CreationDate = DateTime.Now;
                }

                // Save database changes
                ctx.SaveChanges();
            }

            // Set save state to true and notify print function of change
            IsDataSaved = true;
            PrintEnergyLabelCmd.NotifyCanExecuteChanged();
        }
        private void DropExistingOffer(Offer offer)
        {
            // Remove offer from local observable collection
            Offers.Remove(offer);

            // Open a database context and drop offer
            using (var ctx = new AssistantContext())
            {
                ctx.Offers.Attach(offer);
                ctx.Offers.Remove(offer);
                ctx.SaveChanges();
            }
        }
 public override void LoadDataFromDatabase()
 {
     using (var ctx = new AssistantContext())
     {
         ctx.Offers.Include(o => o.Materials)
         .Include(o => o.Salaries)
         .Include(o => o.PackagedSolution.ApplianceInstances.Select(a => a.Appliance))
         .Include(o => o.OfferInformation)
         .Include(o => o.Client.ClientInformation)
         .ToList()
         .ForEach(Offers.Add);
     }
 }
        public void LoadExistingOfferTest()
        {
            new AssistantContext().Database.Delete();
            ctx = new AssistantContext();

            ctx.Offers.Add(off);
            ctx.SaveChanges();

            testModel.LoadExistingOffer(off.Id);
            Assert.IsTrue(DoContentsMatch(off.Appliances, testModel.Offer.Appliances));
            Assert.IsTrue(DoContentsMatch(off.Materials, testModel.Offer.Materials));
            Assert.IsTrue(DoContentsMatch(off.Salaries, testModel.Offer.Salaries));
        }
Example #20
0
 public void Setup()
 {
     ctx   = new AssistantContext();
     model = new CreatePackagedSolutionViewModel(new DialogCoordinator());
     app1  = new Appliance()
     {
         Name = "hej", DataSheet = new HeatingUnitDataSheet(), CreationDate = DateTime.Now
     };
     app2 = new Appliance()
     {
         Name = "husk navn", DataSheet = new ContainerDataSheet(), CreationDate = DateTime.Now
     };
 }
Example #21
0
        /// <summary>
        /// Метод видаляє виділений Section та всі звязані таблиці, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="sectionSelect"></param>
        public void DelSection(ref AssistantContext db, ref Section sectionSelect)
        {
            if (sectionSelect == null)
            {
                return;
            }
            Section section = sectionSelect as Section;
            var     example = db.Examples.Where(e => e.Section.Id == section.Id);

            db.Examples.RemoveRange(example);
            db.Sections.Remove(section);
            db.SaveChanges();
        }
Example #22
0
        /// <summary>
        /// Метод видаляє виділений Topic та всі звязані таблиці, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="topicSelect"></param>
        public void DelTopic(ref AssistantContext db, ref Topic topicSelect)
        {
            if (topicSelect == null)
            {
                return;
            }
            Topic topic   = topicSelect as Topic;
            var   example = db.Examples.Where(e => e.Section.TopicId == topic.Id);
            var   section = db.Sections.Where(s => s.TopicId == topic.Id);

            db.Examples.RemoveRange(example);
            db.Sections.RemoveRange(section);
            db.Topics.Remove(topic);
            db.SaveChanges();
        }
Example #23
0
        /// <summary>
        /// Метод редагує та зберігає Book, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bookSelect"></param>
        public void EditBook(ref AssistantContext db, ref Book bookSelect)
        {
            if (bookSelect == null)
            {
                return;
            }
            Book        book    = bookSelect as Book;
            MessageView message = new MessageView(book.NameBook);

            if (message.ShowDialog() == true)
            {
                book.NameBook        = message.Message;
                db.Entry(book).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }
        }
Example #24
0
        /// <summary>
        /// Метод редагує та зберігає Section, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="sectionSelect"></param>
        public void EditSection(ref AssistantContext db, ref Section sectionSelect)
        {
            if (sectionSelect == null)
            {
                return;
            }
            Section     section = sectionSelect as Section;
            MessageView message = new MessageView(section.NameSection);

            if (message.ShowDialog() == true)
            {
                section.NameSection     = message.Message;
                db.Entry(section).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }
        }
Example #25
0
        /// <summary>
        /// Метод редагує та зберігає Topic, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="topicSelect"></param>
        public void EditTopic(ref AssistantContext db, ref Topic topicSelect)
        {
            if (topicSelect == null)
            {
                return;
            }
            Topic       topic   = topicSelect as Topic;
            MessageView message = new MessageView(topic.NameTopic);

            if (message.ShowDialog() == true)
            {
                topic.NameTopic       = message.Message;
                db.Entry(topic).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }
        }
Example #26
0
        /// <summary>
        /// Метод видаляє виділену Book та всіх хто на неї зсилається, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bookSelect"></param>
        public void DelBook(ref AssistantContext db, ref Book bookSelect)
        {
            if (bookSelect == null)
            {
                return;
            }
            Book b        = bookSelect as Book;
            var  examples = db.Examples.Where(e => e.Section.Topic.BookId == b.Id);
            var  sections = db.Sections.Where(s => s.Topic.BookId == b.Id);
            var  topics   = db.Topics.Where(t => t.BookId == b.Id);

            db.Examples.RemoveRange(examples);
            db.Sections.RemoveRange(sections);
            db.Topics.RemoveRange(topics);
            db.Books.Remove(b);
            db.SaveChanges();
        }
Example #27
0
        /// <summary>
        /// Метод створює нову Topic та підвязує її до виділеної Book, обовязкова передача по ref !!! Так як метод змінює існуючий контекст.
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bookSelect"></param>
        public void AddTopic(ref AssistantContext db, ref Book bookSelect)
        {
            if (bookSelect == null)
            {
                return;
            }
            Book        book    = bookSelect as Book;
            MessageView message = new MessageView("");

            if (message.ShowDialog() == true)
            {
                Topic topic = new Topic();
                topic.NameTopic = message.Message;
                topic.Book      = book;
                db.Topics.Add(topic);
                db.SaveChanges();
            }
        }
        public void LoadExistingPackagedSolution(int packagedSolutionId)
        {
            using (var ctx = new AssistantContext())
            {
                var existingPackagedSolution = ctx.PackagedSolutions.Where(p => p.Id == packagedSolutionId)
                                               .Include(s => s.ApplianceInstances.Select(i => i.Appliance.DataSheet))
                                               .FirstOrDefault();

                if (existingPackagedSolution == null)
                {
                    return;
                }

                // Copy appliances
                foreach (var appliance in existingPackagedSolution.ApplianceInstances)
                {
                    AppliancesInPackagedSolution.Add(appliance.MakeCopy());
                }
            }
        }
        public OfferExportViewModel(Offer offer)
        {
            OfferTitle        = offer.OfferInformation.Title;
            ClientCompanyName = offer.Client.ClientInformation.CompanyName == null ? offer.Client.ClientInformation.CompanyName : null;
            ClientName        = offer.Client.ClientInformation.Name;
            ClientStreet      = offer.Client.ClientInformation.Address;
            ClientCity        = offer.Client.ClientInformation.City + ", " + offer.Client.ClientInformation.PostalCode;

            CreationDate = offer.CreationDate.ToString("dd. MMMM yyyy");
            Signatur     = offer.OfferInformation.Signature;

            using (var ctx = new AssistantContext())
            {
                var companyInfo = ctx.CompanyInformation.FirstOrDefault();

                if (companyInfo == null)
                {
                    return;
                }

                CompanyName = companyInfo.CompanyName;
                Adresse     = companyInfo.Address;
                Email       = companyInfo.Email;
                WebSite     = companyInfo.Website;
                Telephone   = companyInfo.Telephone;
                CVR         = companyInfo.Cvr;
            }

            IntroText = offer.OfferInformation.Intro;
            OutroText = offer.OfferInformation.Outro;

            TotalAmountEks      = offer.TotalSalesPrice;
            TotalSalesPriceInkl = (offer.TotalSalesPrice * 1.25);
            MomsAmount          = TotalSalesPriceInkl - offer.TotalSalesPrice;
            Moms            = ((offer.OfferInformation.ApplyTax) ? "inkl. moms" : "Eks. moms");
            TotalSalesPrice = ((offer.OfferInformation.ApplyTax) ? TotalSalesPriceInkl : TotalAmountEks);

            AppliancesPrice = offer.AppliancesSalesPrice;
            SalariesPrice   = offer.SalariesSalesPrice;
            MaterialsPrice  = offer.MaterialsSalesPrice;
        }
Example #30
0
        public void LoadExistingOffer(int existingOfferId)
        {
            using (var ctx = new AssistantContext())
            {
                var existingOffer = ctx.Offers.Where(o => o.Id == existingOfferId)
                                    .Include(o => o.Appliances)
                                    .Include(o => o.PackagedSolution)
                                    .Include(o => o.Materials)
                                    .Include(o => o.Salaries)
                                    .FirstOrDefault();

                if (existingOffer == null)
                {
                    return;
                }

                Offer.PackagedSolution = existingOffer.PackagedSolution;

                // Load appliances
                foreach (var appliance in existingOffer.Appliances)
                {
                    AppliancesInOffer.Add(appliance);
                }

                // Load materials
                foreach (var material in existingOffer.Materials)
                {
                    MaterialsInOffer.Add(material);
                }

                // Load salaries
                foreach (var salary in existingOffer.Salaries)
                {
                    SalariesInOffer.Add(salary);
                }

                ArePackagedSolutionsVisible = false;
                IsComponentTabVisible       = true;
            }
        }