public ActionResult Register(int Category, App.Models.Oferta.RegisterViewModel model, string Argument)
        {
            this.ValidateRegistration(model, false);

            if (!ModelState.IsValid)
            {
                ViewBag.Argument = Argument;
                return(View("~/Views/Oferta/Register.cshtml", model));
            }

            var surveycomplation = this.RegisterViewModelCompanyMap(model);

            this.modelContext.Companies.Add(surveycomplation.Company);
            this.modelContext.Products.Add(surveycomplation.Product);
            this.modelContext.Contacts.Add(surveycomplation.Company.ComercialContact);
            this.modelContext.Contacts.Add(surveycomplation.Product.ProductContact);
            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                surveycomplation.Company.CompanyLogo = surveycomplation.Company.Id + "_" + model.CompanyLogo.FileName;
            }

            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                var fileName = Path.GetFileName(surveycomplation.Company.CompanyLogo);
                var path     = Path.Combine(Server.MapPath("~/Content/images/logos"), fileName);
                model.CompanyLogo.SaveAs(path);
            }

            return(RedirectToAction("Survey", "../Product", new { Category = Category, Company = surveycomplation.Company.Id }));
        }
        public ActionResult Register(int Category)
        {
            var model = new App.Models.Oferta.RegisterViewModel {
                CategoryId = Category
            };

            ViewBag.Argument = "Register";
            return(View("~/Views/Oferta/Register.cshtml", model));
        }
        public ActionResult RegisterContinue(App.Models.Oferta.RegisterViewModel model, string Argument)
        {
            this.ValidateRegistration(model, false);

            if (!ModelState.IsValid)
            {
                ViewBag.Argument = Argument;
                return(View("~/Views/Oferta/Register.cshtml", model));
            }

            var surveyCompletion = this.RegisterViewModelCompanyMap(model);

            this.modelContext.Companies.Add(surveyCompletion.Company);
            this.modelContext.Products.Add(surveyCompletion.Product);
            this.modelContext.Contacts.Add(surveyCompletion.Company.ComercialContact);
            this.modelContext.Contacts.Add(surveyCompletion.Product.ProductContact);
            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                surveyCompletion.Company.CompanyLogo = surveyCompletion.Company.Id + "_" + model.CompanyLogo.FileName;
            }

            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                var fileName = Path.GetFileName(surveyCompletion.Company.CompanyLogo);
                var path     = Path.Combine(Server.MapPath("~/Content/images/logos"), fileName);
                model.CompanyLogo.SaveAs(path);
            }
            else
            {
                var surveyCompletionPartialCompany = this.modelContext
                                                     .SurveysCompletion
                                                     .Include("Company")
                                                     .FirstOrDefault(x => x.Id == model.SurveyCompletionId)
                                                     .Company;

                surveyCompletion.Company.CompanyLogo = surveyCompletionPartialCompany.CompanyLogo;

                this.modelContext.SaveChanges();
            }

            return(RedirectToAction("SurveyContinue", "../Product", new
            {
                Category = model.CategoryId,
                Company = surveyCompletion.Company.Id,
                SurveyCompletionId = model.SurveyCompletionId
            }));
        }
        private SurveyCompletion RegisterViewModelCompanyMap(App.Models.Oferta.RegisterViewModel model)
        {
            var surveyCompletion = new SurveyCompletion
            {
                Company =
                {
                    CompanyName            = model.CompanyName,
                    CompanyDescription     = model.CompanyDescription,
                    CompanyWebSite         = model.CompanyWebSite,
                    CompanyCountry         = model.CompanyCountry,
                    CompanyCity            = model.CompanyCity,
                    CompanyAddress         = model.CompanyAddress,
                    CompanyPostalCode      = model.CompanyPostalCode,
                    CompanyBranchOfficesIn = model.CompanyBranchOfficesIn,
                    CompanyFiscalStartDate = model.CompanyFiscalStartDate,
                    CompanyFiscalEndDate   = model.CompanyFiscalEndDate,
                    CompanyPeopleInCompany = model.CompanyPeopleInCompany,
                    ComercialContact       =
                    {
                        FullName = model.ComercialContactFullName,
                        Position = model.ComercialContactPosition,
                        Phone    = model.ComercialContactPhone,
                        Email    = model.ComercialContactEmail
                    },
                }//,

                //Product =
                //{
                //    Name = model.ProductName,
                //    Version = model.ProductVersion,
                //    Description = model.ProductDescription,
                //    WebSite = model.ProductWebSite,
                //    ProductContact =
                //    {
                //        FullName = model.ProductContactFullName,
                //        Position = model.ProductContactPosition,
                //        Phone = model.ProductContactPhone,
                //        Email = model.ProductContactEmail
                //    }
                //}
            };

            return(surveyCompletion);
        }
        private App.Models.Oferta.RegisterViewModel CompanyRegisterViewModelMap(SurveyCompletionParent surveyCompletion, int surveyCompletionId)
        {
            var model = new App.Models.Oferta.RegisterViewModel
            {
                SurveyCompletionId       = surveyCompletionId,
                CompanyName              = surveyCompletion.Company.CompanyName,
                CompanyDescription       = surveyCompletion.Company.CompanyDescription,
                CompanyWebSite           = surveyCompletion.Company.CompanyWebSite,
                CompanyCountry           = surveyCompletion.Company.CompanyCountry,
                CompanyCity              = surveyCompletion.Company.CompanyCity,
                CompanyAddress           = surveyCompletion.Company.CompanyAddress,
                CompanyPostalCode        = surveyCompletion.Company.CompanyPostalCode,
                CompanyBranchOfficesIn   = surveyCompletion.Company.CompanyBranchOfficesIn,
                CompanyFiscalStartDate   = surveyCompletion.Company.CompanyFiscalStartDate,
                CompanyFiscalEndDate     = surveyCompletion.Company.CompanyFiscalEndDate,
                CompanyPeopleInCompany   = surveyCompletion.Company.CompanyPeopleInCompany,
                ComercialContactFullName = surveyCompletion.Company.ComercialContact.FullName,
                ComercialContactPosition = surveyCompletion.Company.ComercialContact.Position,
                ComercialContactPhone    = surveyCompletion.Company.ComercialContact.Phone,
                ComercialContactEmail    = surveyCompletion.Company.ComercialContact.Email
            };

            return(model);
        }
        private void ValidateRegistration(App.Models.Oferta.RegisterViewModel model, bool partial)
        {
            var errorMessage = "El campo {0} es obligatorio";

            if (model.ComercialContactEmail == null)
            {
                ModelState.AddModelError("ComercialContactEmail", string.Format(errorMessage, "Email"));
            }

            if (!partial)
            {
                if (model.CompanyName == null)
                {
                    ModelState.AddModelError("CompanyName", string.Format(errorMessage, "Nombre"));
                }

                if (model.CompanyDescription == null)
                {
                    ModelState.AddModelError("CompanyDescription", string.Format(errorMessage, "Descripción"));
                }

                if (model.CompanyWebSite == null)
                {
                    ModelState.AddModelError("CompanyWebSite", string.Format(errorMessage, "Web Site"));
                }

                if (model.CompanyCountry == null)
                {
                    ModelState.AddModelError("CompanyCountry", string.Format(errorMessage, "País"));
                }

                if (model.CompanyCity == null)
                {
                    ModelState.AddModelError("CompanyCity", string.Format(errorMessage, "Ciudad"));
                }

                if (model.CompanyAddress == null)
                {
                    ModelState.AddModelError("CompanyAddress", string.Format(errorMessage, "Dirección"));
                }

                if (model.CompanyFiscalStartDate == null)
                {
                    ModelState.AddModelError("CompanyFiscalStartDate", string.Format(errorMessage, "Mes de inicio del año fiscal"));
                }

                if (model.CompanyFiscalEndDate == null)
                {
                    ModelState.AddModelError("CompanyFiscalEndDate", string.Format(errorMessage, "Mes de cierre del año fiscal"));
                }

                //if (model.ProductName == null)
                //{
                //    ModelState.AddModelError("ProductName", string.Format(errorMessage, "Nombre"));
                //}

                //if (model.ProductDescription == null)
                //{
                //    ModelState.AddModelError("ProductDescription", string.Format(errorMessage, "Descripción"));
                //}

                if (model.ComercialContactFullName == null)
                {
                    ModelState.AddModelError("ComercialContactFullName", string.Format(errorMessage, "Nombre y Apellido"));
                }

                if (model.ComercialContactPosition == null)
                {
                    ModelState.AddModelError("ComercialContactPosition", string.Format(errorMessage, "Cargo / Función"));
                }

                if (model.ComercialContactPhone == null)
                {
                    ModelState.AddModelError("ComercialContactPhone", string.Format(errorMessage, "Teléfono"));
                }
            }
        }
        public ActionResult RegisterContinuePartial(App.Models.Oferta.RegisterViewModel model, string Argument)
        {
            this.ValidateRegistration(model, true);

            if (!ModelState.IsValid)
            {
                ViewBag.Argument = Argument;
                return(View("~/Views/Oferta/Register.cshtml", model));
            }

            var surveyCompletionTmp = this.RegisterViewModelCompanyMap(model);

            this.modelContext.Companies.Add(surveyCompletionTmp.Company);
            this.modelContext.Products.Add(surveyCompletionTmp.Product);
            this.modelContext.Contacts.Add(surveyCompletionTmp.Company.ComercialContact);
            this.modelContext.Contacts.Add(surveyCompletionTmp.Product.ProductContact);
            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                surveyCompletionTmp.Company.CompanyLogo = surveyCompletionTmp.Company.Id + "_" + model.CompanyLogo.FileName;
            }

            this.modelContext.SaveChanges();

            if (model.CompanyLogo != null)
            {
                var fileName = Path.GetFileName(surveyCompletionTmp.Company.CompanyLogo);
                var path     = Path.Combine(Server.MapPath("~/Content/images/logos"), fileName);
                model.CompanyLogo.SaveAs(path);
            }
            else
            {
                if (model.SurveyCompletionId != 0)
                {
                    var surveyCompletionPartialCompany = this.modelContext
                                                         .SurveysCompletion
                                                         .Include("Company")
                                                         .FirstOrDefault(x => x.Id == model.SurveyCompletionId)
                                                         .Company;

                    surveyCompletionTmp.Company.CompanyLogo = surveyCompletionPartialCompany.CompanyLogo;

                    this.modelContext.SaveChanges();
                }
            }

            var surveyViewModel = new SurveyViewModel
            {
                CompanyId          = surveyCompletionTmp.Company.Id,
                SurveyId           = model.CategoryId,
                SurveyCompletionId = model.SurveyCompletionId,
                CategoryId         = model.CategoryId
            };

            var surveyCompletionPartial = this.modelContext
                                          .SurveysCompletion
                                          .Include("Questions")
                                          .Include("Questions.Answers")
                                          .FirstOrDefault(x => x.Id == model.SurveyCompletionId);

            var surveyCompletionParent = this.InsertSurveyCompletion(surveyViewModel, true);

            //surveyCompletionParent.Questions = surveyCompletionPartial.Questions;

            /*this.modelContext.SaveChanges();
             *
             * var template = this.RenderRazorViewToString("~/Views/Demanda/Email/EvaluationTemplate.cshtml", surveyCompletion);
             * var pdfFileName = this.pdfService.GetEvaluationFileName(surveyCompletion.Id);
             * var pdfFullName = this.pdfService.Generate(surveyCompletion.Id, template, pdfFileName);
             *
             * this.surveyPartialCompletionBySupplyEmailService.Send(pdfFullName, surveyCompletion);*/

            return(RedirectToAction("ThanksPartial", "../Product/Evaluation"));
        }