Beispiel #1
0
        public async Task <IActionResult> EditOffer(OfferViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("offermodel", "Form is not valid!");
                return(View(model));
            }
            try
            {
                ICollection <EstimateConnects> Connect;
                ICollection <Offers>           offers;


                using (var context = new DataBaseContext())
                {
                    offers = context.Offer
                             .Include(offermodel => offermodel.Estimate)
                             .Include(users => users.CreatedBy)
                             .Include(users => users.UpdatedBy)
                             .ToList();

                    Connect = context.EstimateConnects
                              .Include(line => line.EstimateLines)
                              .ToList();
                }

                Offers offer = await OfferRepository.FindAsync(model.Id);

                var   dboffer  = offers.FirstOrDefault(x => x.Id.Equals(model.Id));
                Users user     = UserRepository.FindUserByEmail(User.Identity.Name);
                var   estimate = await EstimateRepository.FindAsync(dboffer.Estimate.Id);

                var connectlines = Connect.Where(x => x.Estimate.Id.Equals(dboffer.Estimate.Id)).ToList();
                if (model.EstimateLines != null)
                {
                    foreach (var item in model.EstimateLines)
                    {
                        if (EstimateLinesRepository.AnyLineExist(item.Id) == true)
                        {
                            var line = await EstimateLinesRepository.FindAsync(item.Id);

                            line.Specification = item.Specification;
                            line.Hours         = item.Hours;
                            line.HourCost      = item.HourCost;
                            line.TotalCost     = item.TotalCost;
                            await EstimateLinesRepository.SaveChangesAsync();
                        }
                        else
                        {
                            var newline = new EstimateLines
                            {
                                Specification = item.Specification,
                                Hours         = item.Hours,
                                HourCost      = item.HourCost,
                                TotalCost     = item.TotalCost
                            };
                            await EstimateLinesRepository.AddAsync(newline);

                            var newconnect = new EstimateConnects
                            {
                                Estimate      = estimate,
                                EstimateLines = newline
                            };
                            await EstimateConnectsRepository.AddAsync(newconnect);
                        }
                    }
                    foreach (var connectline in connectlines)
                    {
                        if (!model.EstimateLines.Any(x => x.Id == connectline.EstimateLines.Id))
                        {
                            await EstimateConnectsRepository.RemoveAsync(connectline.Id);
                        }
                    }
                }

                offer.IndexContent    = model.IndexContent;
                offer.LastUpdatedAt   = DateTime.Now;
                offer.UpdatedBy       = user;
                offer.ProjectName     = model.ProjectName;
                offer.DocumentVersion = offer.DocumentVersion + 1;
                //offer.DebtorNumber = model.DebtorNumber;

                await OfferRepository.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            catch
            {
                ICollection <Offers>           offers;
                ICollection <EstimateConnects> Connect;
                using (var context = new DataBaseContext())
                {
                    offers = context.Offer
                             .Include(offermodel => offermodel.Estimate)
                             .Include(user => user.CreatedBy)
                             .Include(user => user.UpdatedBy)
                             .ToList();

                    Connect = context.EstimateConnects
                              .Include(line => line.EstimateLines)
                              .ToList();
                }

                var offer    = offers.FirstOrDefault(x => x.Id.Equals(model.Id));
                var estimate = await EstimateRepository.FindAsync(offer.Estimate.Id.ToString());

                var lines = Connect.Where(x => x.Estimate.Id == estimate.Id).ToList();

                ViewData["estimatelines"] = lines.Select(x => new EstimateConnectViewModel
                {
                    EstimateLines = x.EstimateLines
                }).ToList();
                return(View(model));
            }
        }
Beispiel #2
0
        public async Task <IActionResult> NewOffer(OfferViewModel model)
        {
            if (ModelState.IsValid)
            {
                Users user = UserRepository.FindUserByEmail(User.Identity.Name);
                //var customer = wefactconnector.GetCustomerInfo(model.DebtorNumber);
                var settingdocument = SettingsRepository.getSpecificSetting("DocumentCode");
                int documentcode    = int.Parse(settingdocument.Value);
                var code            = documentcode.ToString("000");

                var offerte = new Offers
                {
                    IndexContent = model.IndexContent,
                    ProjectName  = model.ProjectName,
                    //DebtorNumber = model.DebtorNumber,
                    CreatedBy       = user,
                    CreatedAt       = DateTime.Now,
                    LastUpdatedAt   = DateTime.Now,
                    UpdatedBy       = user,
                    DocumentCode    = "PV" + code,
                    DocumentVersion = 1
                };

                await OfferRepository.AddAsync(offerte);

                documentcode++;
                settingdocument.Value = documentcode.ToString();
                await SettingsRepository.SaveChangesAsync();

                var est = new Estimates
                {
                };

                await EstimateRepository.AddAsync(est);

                foreach (var line in model.EstimateLines)
                {
                    var lin = new EstimateLines
                    {
                        HourCost      = line.HourCost,
                        Hours         = line.Hours,
                        Specification = line.Specification,
                        TotalCost     = line.TotalCost
                    };

                    var connect = new EstimateConnects
                    {
                        Estimate      = est,
                        EstimateLines = lin
                    };

                    await EstimateLinesRepository.AddAsync(lin);

                    await EstimateConnectsRepository.AddAsync(connect);
                }

                offerte.Estimate = est;
                await OfferRepository.UpdateAsync(offerte);

                return(Ok());
            }
            else
            {
                return(BadRequest(ModelState));
            }
        }