/// <summary> /// Method which generates quote for automated process after submiting the request online /// </summary> /// <param name="userModel">Details of the user request (from the web)</param> /// <returns>ID of the quote</returns> public int CreateAutomatedQuote(QuoteRequestModel userModel) { var organization = _db.Organizations.First(o => o.VAT == userModel.data.oib && o.SubjectBusinessUnit == string.Empty); var quotes = _db.Quotes.Count(q => q.RelatedOrganizationId == organization.MerId && q.InsertDate.Year == DateTime.Now.Year); if (quotes >= 1) { quotes++; } var quoteCount = quotes == 0 ? 1 : quotes; var quoteNumber = organization.MerId + @"-" + DateTime.Now.Year + @"-" + DateTime.Now.Month + @"/" + quoteCount; _db.Quotes.Add(new Quote() { QuoteNumber = quoteNumber, RelatedOrganizationId = organization.MerId, AssignedTo = "Moj-eRačun", StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(7), QuoteType = Quote.QuoteTypeEnum.ContractFixed, QuoteStatus = Quote.QuoteStatusEnum.Created, QuoteSum = 0, QuoteSumTotal = 0, ContractDuration = 36, AcquireEmailPayment = true, InsertDate = DateTime.Now, CreatedBy = "Moj-eRačun" }); _db.SaveChanges(); return(_db.Quotes.First(q => q.QuoteNumber == quoteNumber).Id); }
public IHttpActionResult AddQuote(QuoteRequestModel requestModel) { if (ModelState.IsValid) { var quoteEntity = new QuoteEntity { Value = requestModel.Value }; _quoteService.AddQuote(quoteEntity); _hubContext.Clients.Group("add").AddQuote(quoteEntity); } return(Ok()); }
public IHttpActionResult DeleteQuote(QuoteRequestModel requestModel) { if (ModelState.IsValid) { var quoteEntity = new QuoteEntity { Id = requestModel.Id, Value = requestModel.Value }; _quoteService.DeleteQuote(requestModel.Id); _hubContext.Clients.Group("delete").DeleteQuote(requestModel.Id); } return(Ok()); }
[Obsolete] //temporary marker public JsonResult RegisterQuoteRequest() { var model = new QuoteRequestModel(); var returnModel = new ClickVoxApiResponse(); if (TryUpdateModel(model)) { if (model.type == "ponuda") { if (_db.Organizations.Any(o => o.VAT == model.data.oib && o.SubjectBusinessUnit == string.Empty)) { var merId = _db.Organizations.FirstOrDefault(o => o.VAT == model.data.oib && o.SubjectBusinessUnit == string.Empty).MerId; _organizationHelperMethods.SyncOrganizationInformation(merId); // Creating the folder to store quote and contract draft var path = System.IO.Directory.CreateDirectory(System.IO.Path.Combine(App.ExportPathGlobal + "Apis/RegisterQuoteRequest/" + model.data.oib + "_" + model.data.imeIPrezime + "_" + DateTime.Now.ToString("yyyyMMdd-HHmm"))); // Creating database entity var newEntity = _db.ClickVoxQuoteRequests.Add(new ClickVoxQuoteRequest() { RelatedOrganizationId = _db.Organizations.FirstOrDefault(o => o.VAT == model.data.oib && o.SubjectBusinessUnit == string.Empty).MerId, RequestEmail = model.data.eMail, RequestPhoneNumber = model.data.telefon, RequestNote = model.data.napomene, RequestCreatorName = model.data.imeIPrezime, RequestOrganizationName = model.data.nazivTvrtke, RequestNumberOfInvoices = model.data.mjesecniBrojRacunaPremaPravnimOsobama, DocumentsFolderPath = path.FullName, InsertDate = DateTime.Now }); _db.SaveChanges(); var package = _quoteHelperMethods.DefinePackage(int.Parse(model.data.mjesecniBrojRacunaPremaPravnimOsobama)); // define package for Quote var quote = _quoteHelperMethods.CreateAutomatedQuote(model); // get QuoteID _quoteHelperMethods.CreateQuoteLinesForAutomatedQuote(package, quote); // create QuoteLines // prepare HTML for Quote and save PDF var htmlModel = new AutomaticQuotePdfViewModel() { Quote = _db.Quotes.Find(quote), User = new ApplicationUser(), AutomaticRequest = newEntity }; var htmlContent = this.RenderViewToString("~/Areas/Sales/Views/Shared/PdfQuoteAutomatic.cshtml", htmlModel); _quoteHelperMethods.SavePdfQuote(path.FullName, htmlContent); // prepare Contract Draft var contractDraftModel = new ExportContractDraftViewModel() { QuoteId = quote, Date = DateTime.Today.ToShortDateString(), Signer = "_______________", Position = "_______________", Header = "_______________", OrganizationId = newEntity.RelatedOrganizationId, SuggestedDate = DateTime.Today }; _contractsHelperMethods.CreateDraft(contractDraftModel, "Moj-eRačun"); var htmlContractModel = new ExportContractDraftPdfViewModel() { Quote = _db.Quotes.Find(quote), ContractDraft = _db.ContractDrafts.OrderByDescending(c => c.Id).First(c => c.RelatedQuoteId == quote) }; var htmlContractContent = this.RenderViewToString("~/Areas/Sales/Views/Shared/Contract.cshtml", htmlContractModel); _contractsHelperMethods.SavePdfDraft(path.FullName, htmlContractContent); // send email var filePaths = System.IO.Directory.EnumerateFiles(path.FullName); var quoteFile = System.IO.Path.Combine(filePaths.First(x => x.Contains("Ponuda"))); var contractFile = System.IO.Path.Combine(filePaths.First(x => x.Contains("Ugovor"))); var quoteAtt = new Attachment(quoteFile); var contractAtt = new Attachment(contractFile); var promoAtt = new Attachment(AppDomain.CurrentDomain.BaseDirectory + "Content/Zasto_Moj-eRacun.pdf"); var priceListAtt = new Attachment(AppDomain.CurrentDomain.BaseDirectory + "Content/Cjenik_Elektronički računi d.o.o..pdf"); _helperMethods.SendAutomaticQuoteEmail("*****@*****.**", model.data.eMail, AppDomain.CurrentDomain.BaseDirectory + "Content/mail_files/automatic_quoteRequest.html", quoteAtt, contractAtt, promoAtt, priceListAtt); // return response returnModel.Status = "OK"; returnModel.Message = "Uspješno je zabilježen zahtjev za ponudom!"; } else { returnModel.Status = "ERROR"; returnModel.Message = "Nepostojeća tvrtka u Moj-CRM sustavu!"; } } else { returnModel.Status = "ERROR"; returnModel.Message = "Pogrešan tip poruke!"; } } else { returnModel.Status = "ERROR"; returnModel.Message = "Greška prilikom bilježenja zahtjeva za ponudom!"; } return(Json(returnModel)); }