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)); } }
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)); } }