コード例 #1
0
        public JsonResult SaveApproveStatus(InquiriesValidation form)
        {
            if (!AuthorizationProvider.IsInquiryEditor())
            {
                string message = string.Format("User '{0}' does not have permission to save approval status for Inquiry {1}.", this.User.Identity.Name, form.Id.ToString());
                DojoLogger.Warn(message, typeof(InquiryController));

                return(Json("denied", JsonRequestBehavior.AllowGet));
            }

            try
            {
                InquiryProvider     inquiryProvider = new InquiryProvider(_dbContext);
                InquiriesValidation inquiry         = inquiryProvider.Retrieve(form.Id);
                SetApproveFields(inquiry, form);
                inquiryProvider.Update(inquiry.Id, inquiry);
                inquiryProvider.Commit();

                return(Json(form.Id.ToString(), JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                string message = string.Format("Save Apporval Ststus for Inquiry {0} fails. {1}", form.Id.ToString(), ex.Message + ex.StackTrace);
                DojoLogger.Error(message, typeof(InquiryController));
            }
            return(Json(string.Empty, JsonRequestBehavior.AllowGet));
        }
コード例 #2
0
        public PartialViewResult Approve(InquiriesValidation form)
        {
            try
            {
                InquiryProvider  inquiryProvider  = new InquiryProvider(_dbContext);
                PropertyProvider propertyProvider = new PropertyProvider(_dbContext);

                InquiriesValidation inquiry = inquiryProvider.Retrieve(form.Id);
                form.CPL = propertyProvider.Retrieve(inquiry.PropertyCode);
                inquiry.Doesitrequire2pricingteamapprovals = form.Doesitrequire2pricingteamapprovals;
                inquiry.PricingApprover1 = form.PricingApprover1;
                inquiry.PricingApprover2 = form.PricingApprover2;
                inquiry.PricingDecision1 = form.PricingDecision1;
                inquiry.PricingReason1   = form.PricingReason1;
                inquiry.ApprovedbyOwner  = form.ApprovedbyOwner;

                inquiryProvider.Update(inquiry.Id, inquiry);
                inquiryProvider.Commit();
            }
            catch (Exception ex)
            {
                // TODO: Log error
                this.ModelState.AddModelError("", ex);
            }

            return(PartialView("ApprovePartial", form));
        }
コード例 #3
0
        public ActionResult Index(int id = 0)
        {
            var model = new InquiryViewModel();

            // old Dojo logic gets all inquiries if id is not found. so emulate it here.
            model.InquiryId = id;
            if (id != 0)
            {
                InquiryProvider     inquiryProvider = new InquiryProvider(_dbContext);
                InquiriesValidation inquiry         = inquiryProvider.Retrieve(id);
                if (inquiry == null)
                {
                    model.InquiryId = 0;
                }
            }

            model.UserName = this.User.Identity.Name;
            // hack here: for admin role, we set the UserName to 'DelegateDeletion' to allow admin to delete other's inquiry
            if (AuthorizationProvider.IsAdmin())
            {
                model.UserName = "******";
            }

            return(View(model));
        }
コード例 #4
0
        public ActionResult ShortAdd()
        {
            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            var model = new InquiriesValidation();

            return(View(model));
        }
コード例 #5
0
        public ActionResult Edit(int Id)
        {
            if (!AuthorizationProvider.IsInquiryEditor() && !AuthorizationProvider.IsViewer())
            {
                string message = string.Format("User '{0}' does not have permission to edit Inquiry {1}.", this.User.Identity.Name, Id.ToString());
                DojoLogger.Warn(message, typeof(InquiryController));

                return(RedirectToAction("Index", "Inquiry")
                       .WithError("It looks like you do not have permisssion to edit this inquiry."));
            }

            try
            {
                ViewBag.Title      = "Edit Inquiry";
                ViewBag.ButtonText = "Update Inquiry";

                InquiryProvider     inquiryProvider  = new InquiryProvider(_dbContext);
                PropertyProvider    propertyProvider = new PropertyProvider(_dbContext);
                InquiriesValidation inquiry          = inquiryProvider.Retrieve(Id);
                if (inquiry == null)
                {
                    return(RedirectToAction("NotFound", "Error"));
                }
                ViewBag.Properties = propertyProvider.AggregatedProperties();
                return(PartialView("EditPartial", inquiry));
            }
            catch (Exception ex)
            {
                string message = string.Format("Retrieve Inquiry {0} for Editing fails. {1}", Id.ToString(), ex.Message + ex.StackTrace);
                DojoLogger.Error(message, typeof(InquiryController));
            }

            return(RedirectToAction("Index", "Inquiry")
                   .WithError("The inquiry item cannot be found."));
        }
コード例 #6
0
 private void SetApproveFields(InquiriesValidation inquiry, InquiriesValidation form)
 {
     inquiry.Doesitrequire2pricingteamapprovals = form.Doesitrequire2pricingteamapprovals;
     inquiry.PricingApprover1 = form.PricingApprover1;
     inquiry.PricingApprover2 = form.PricingApprover2;
     inquiry.PricingDecision1 = form.PricingDecision1;
     inquiry.PricingReason1   = form.PricingReason1;
     inquiry.ApprovedbyOwner  = form.ApprovedbyOwner;
 }
コード例 #7
0
        public ActionResult ShortAdd(InquiriesValidation inquiriesValidation)
        {
            var errors = inquiriesValidation.Validate(new ValidationContext(inquiriesValidation, null, null));

            foreach (var error in errors)
            {
                foreach (var memberName in error.MemberNames)
                {
                    ModelState.AddModelError(memberName, error.ErrorMessage);
                }
            }

            if (ModelState.IsValid)
            {
                var selectedProperty = _dbContext.CPLs.Find(inquiriesValidation.PropertyCode);

                inquiriesValidation.CPL = selectedProperty;
                inquiriesValidation.InquiryCreatedTimestamp = DateTime.Now;
                inquiriesValidation.Check_InDay             = inquiriesValidation.Check_inDate.Value.DayOfWeek.ToString();
                inquiriesValidation.Check_OutDay            = inquiriesValidation.Check_outDate.Value.DayOfWeek.ToString();
                if (inquiriesValidation.Check_outDate.HasValue)
                {
                    inquiriesValidation.DaysOut = (inquiriesValidation.Check_inDate.Value - inquiriesValidation.InquiryCreatedTimestamp).Value.Days;
                }
                if (inquiriesValidation.Check_outDate.HasValue)
                {
                    inquiriesValidation.LengthofStay = (inquiriesValidation.Check_outDate.Value - inquiriesValidation.Check_inDate).Value.Days;
                    if (inquiriesValidation.LengthofStay == 0)
                    {
                        inquiriesValidation.LengthofStay = 1;
                    }
                }

                inquiriesValidation.NightlyRate = (((inquiriesValidation.TotalPayout.Value / (decimal)0.97) - inquiriesValidation.CPL.CleaningFees) / inquiriesValidation.LengthofStay);

                if (selectedProperty.BeltDesignation != null && "black belt".Equals(selectedProperty.BeltDesignation.ToLower()))
                {
                    inquiriesValidation.PricingApprover2 = "Pending Review";
                }

                if (selectedProperty.NeedsOwnerApproval.HasValue && selectedProperty.NeedsOwnerApproval.Value)
                {
                    inquiriesValidation.ApprovedbyOwner = "PENDING";
                }
                else
                {
                    inquiriesValidation.ApprovedbyOwner = "N\\A";
                }

                _dbContext.InquiriesValidations.Add(inquiriesValidation);
                saveShowErrors(_dbContext);
                return(RedirectToAction("Index"));
            }

            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            return(View(inquiriesValidation));
        }
コード例 #8
0
        public ActionResult New()
        {
            ViewBag.Title      = "New Inquiry";
            ViewBag.ButtonText = "Add Inquiry";
            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            var inquiry = new InquiriesValidation();

            inquiry.InquiryTeam = ViewBag.UserName;
            return(PartialView("EditPartial", inquiry));
        }
コード例 #9
0
        public ActionResult OwnerApprovalInfo(int Id = 0)
        {
            InquiriesValidation ctvid = _dbContext.InquiriesValidations.Find(Id);

            if (ctvid == null)
            {
                return(RedirectToAction("NotFound", "Error"));
            }
            return(View(ctvid));
        }
コード例 #10
0
        public ActionResult ShortEdit(int Id = 0)
        {
            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            InquiriesValidation model = _dbContext.InquiriesValidations.Find(Id);

            if (model == null)
            {
                return(RedirectToAction("NotFound", "Error"));
            }
            return(View(model));
        }
コード例 #11
0
        public ActionResult Information(int Id = 0)
        {
            ViewBag.PropertyCodes = _dbContext.CPLs.Select(x => new SelectListItem()
            {
                Text = x.PropertyCode, Value = x.PropertyCode
            }).ToList();
            InquiriesValidation ctvid = _dbContext.InquiriesValidations.Find(Id);

            if (ctvid == null)
            {
                return(RedirectToAction("NotFound", "Error"));
            }
            return(PartialView(ctvid));
        }
コード例 #12
0
        public ActionResult Approve(int Id)
        {
            if (!AuthorizationProvider.IsInquiryEditor() && !AuthorizationProvider.IsViewer())
            {
                string message = string.Format("User '{0}' does not have permission to edit Inquiry {1}.", this.User.Identity.Name, Id.ToString());
                DojoLogger.Warn(message, typeof(InquiryController));

                return(RedirectToAction("Index", "Inquiry")
                       .WithError("It looks like you do not have permisssion to edit this inquiry."));
            }

            try
            {
                InquiryProvider inquiryProvider = new InquiryProvider(_dbContext);

                ViewBag.Title      = "Approve Inquiry";
                ViewBag.ButtonText = "Approve Inquiry";
                InquiriesValidation inquiry = inquiryProvider.Retrieve(Id);
                if (inquiry == null)
                {
                    return(RedirectToAction("NotFound", "Error"));
                }

                // get the owner approval flag (string constant defined in ListProvider)
                inquiry.OwnerApprovalNeeded = (inquiry.CPL.NeedsOwnerApproval != null && inquiry.CPL.NeedsOwnerApproval.Value)
                                              ? (inquiry.CPL.NeedsOwnerApproval.Value ? "YES" : "NO")
                                              : "N/A";
                if (inquiry.PricingApprover1 == null)
                {
                    inquiry.PricingApprover1 = ViewBag.UserName;
                }
                if (inquiry.PricingApprover2 == null)
                {
                    inquiry.PricingApprover2 = ViewBag.UserName;
                }
                if (inquiry.PricingDecision1 == null)
                {
                    inquiry.PricingDecision1 = string.Empty;
                }

                return(PartialView("ApprovePartial", inquiry));
            }
            catch (Exception ex)
            {
                string message = string.Format("Retrieve Inquiry {0} for Approval fails. {1}", Id.ToString(), ex.Message + ex.StackTrace);
                DojoLogger.Error(message, typeof(InquiryController));
            }

            return(PartialView("ApprovePartial", new InquiriesValidation()));
        }
コード例 #13
0
        private decimal?ComputeNightlyRate(InquiriesValidation inquiry)
        {
            decimal?nightlyRate = null;

            if (inquiry.LengthofStay != null && inquiry.LengthofStay.Value != 0 && inquiry.CPL != null)
            {
                if (inquiry.CPL.CleaningFees != null)
                {
                    nightlyRate = ((inquiry.TotalPayout.Value / (decimal)0.97) - inquiry.CPL.CleaningFees.Value) / inquiry.LengthofStay;
                }
                else
                {
                    nightlyRate = (inquiry.TotalPayout.Value / (decimal)0.97) / inquiry.LengthofStay;
                }
            }

            return(nightlyRate);
        }
コード例 #14
0
        public PartialViewResult Edit(InquiriesValidation form)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    InquiryProvider inquiryProvider = new InquiryProvider(_dbContext);
                    inquiryProvider.Update(form.Id, form);
                    inquiryProvider.Commit();
                }
            }
            catch (Exception ex)
            {
                // TODO: Log error
                this.ModelState.AddModelError("", ex);
            }

            ViewBag.Accounts   = (new AirbnbAccountProvider(_dbContext)).AggregatedAccounts();
            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            return(PartialView("EditPartial", form));
        }
コード例 #15
0
        public ActionResult Property(int Id)
        {
            if (!AuthorizationProvider.IsViewer())
            {
                return(PartialView("PropertyPartial", new InquiriesValidation()));
            }

            try
            {
                InquiryProvider  inquiryProvider  = new InquiryProvider(_dbContext);
                PropertyProvider propertyProvider = new PropertyProvider(_dbContext);

                ViewBag.Title = "View Property Information";
                InquiriesValidation inquiry = inquiryProvider.Retrieve(Id);
                if (inquiry == null)
                {
                    string message = string.Format("Inquiry {0} not found.", Id.ToString());
                    DojoLogger.Warn(message, typeof(InquiryController));

                    return(RedirectToAction("NotFound", "Error"));
                }

                // make up Airbnb property link if it does not already exist
                if (string.IsNullOrEmpty(inquiry.CPL.AirBnb) && !string.IsNullOrEmpty(inquiry.CPL.AIrBnBID))
                {
                    inquiry.CPL.AirBnb = string.Format(AppConstants.AIRBNB_URL_TEMPLATE, inquiry.CPL.AIrBnBID);
                }

                return(PartialView("PropertyPartial", inquiry));
            }
            catch (Exception ex)
            {
                string message = string.Format("Retrieve Inquiry Property Info fails. {0}", ex.Message);
                DojoLogger.Error(message, typeof(InquiryController));
            }

            return(RedirectToAction("Index", "Inquiry")
                   .WithError("The inquiry item cannot be found."));
        }
コード例 #16
0
        private void SetRelatedFields(InquiriesValidation inquiry)
        {
            if (inquiry.CPL == null)
            {
                inquiry.CPL = _dbContext.CPLs.Find(inquiry.PropertyCode);
            }
            inquiry.InquiryCreatedTimestamp = DateTime.Now;
            inquiry.Check_InDay             = inquiry.Check_inDate.HasValue ? inquiry.Check_inDate.Value.DayOfWeek.ToString() : string.Empty;
            inquiry.Check_OutDay            = inquiry.Check_outDate.HasValue ? inquiry.Check_outDate.Value.DayOfWeek.ToString() : string.Empty;

            if (inquiry.Check_inDate.HasValue)
            {
                inquiry.DaysOut = (inquiry.Check_inDate.Value - inquiry.InquiryCreatedTimestamp.Value).Days;
                if (inquiry.Check_outDate.HasValue)
                {
                    inquiry.LengthofStay = (inquiry.Check_outDate.Value - inquiry.Check_inDate.Value).Days;
                }
            }

            inquiry.NightlyRate = ComputeNightlyRate(inquiry);

            if (inquiry.CPL != null)
            {
                if (inquiry.CPL.BeltDesignation != null && "black belt".Equals(inquiry.CPL.BeltDesignation.ToLower()))
                {
                    inquiry.PricingApprover2 = "Pending Review";
                }

                if (inquiry.CPL.NeedsOwnerApproval.HasValue && inquiry.CPL.NeedsOwnerApproval.Value)
                {
                    inquiry.ApprovedbyOwner = "PENDING";
                }
                else
                {
                    inquiry.ApprovedbyOwner = "N/A";
                }
            }
        }
コード例 #17
0
        private void SetRelatedFields(InquiriesValidation inquiry, InquiriesValidation form)
        {
            // use inquiry object as form may not have all the fields
            inquiry.PropertyCode      = form.PropertyCode;
            inquiry.GuestName         = form.GuestName;
            inquiry.InquiryTeam       = form.InquiryTeam;
            inquiry.Channel           = form.Channel;
            inquiry.TotalPayout       = form.TotalPayout;
            inquiry.Check_inDate      = form.Check_inDate;
            inquiry.Check_outDate     = form.Check_outDate;
            inquiry.Weekdayorphandays = form.Weekdayorphandays;
            inquiry.AdditionalInfo_StatusofInquiry = form.AdditionalInfo_StatusofInquiry;
            if (inquiry.CPL == null)
            {
                inquiry.CPL = _dbContext.CPLs.Find(inquiry.PropertyCode);
            }

            if (form.Check_inDate != null)
            {
                inquiry.Check_InDay = form.Check_inDate.Value.DayOfWeek.ToString();
            }

            if (form.Check_outDate != null)
            {
                inquiry.Check_OutDay = form.Check_outDate.Value.DayOfWeek.ToString();
                inquiry.DaysOut      = (form.Check_outDate.Value - inquiry.InquiryCreatedTimestamp).Value.Days;
                if (form.Check_inDate != null)
                {
                    inquiry.LengthofStay = (form.Check_outDate.Value - form.Check_inDate.Value).Days;
                }
                else
                {
                    inquiry.LengthofStay = null;
                }
            }

            inquiry.NightlyRate = ComputeNightlyRate(inquiry);
        }
コード例 #18
0
        public ActionResult OwnerApprovalInfo(InquiriesValidation inquiriesValidation)
        {
            try
            {
                InquiriesValidation strng = _dbContext.InquiriesValidations.Single(nc => nc.Id == inquiriesValidation.Id);

                var selectedProperty = _dbContext.CPLs.Find(strng.PropertyCode);
                strng.CPL = selectedProperty;
                strng.Doesitrequire2pricingteamapprovals = inquiriesValidation.Doesitrequire2pricingteamapprovals;
                strng.PricingApprover1 = inquiriesValidation.PricingApprover1;
                strng.PricingApprover2 = inquiriesValidation.PricingApprover2;
                strng.PricingDecision1 = inquiriesValidation.PricingDecision1;
                strng.PricingReason1   = inquiriesValidation.PricingReason1;
                strng.ApprovedbyOwner  = inquiriesValidation.ApprovedbyOwner;
                _dbContext.SaveChanges();
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                this.ModelState.AddModelError("", ex);
                return(View());
            }
        }
コード例 #19
0
        public ActionResult ShortEdit(InquiriesValidation inquiriesValidation)
        {
            if (ModelState.IsValid)
            {
                InquiriesValidation strng = _dbContext.InquiriesValidations.Single(nc => nc.Id == inquiriesValidation.Id);

                var selectedProperty = _dbContext.CPLs.Find(inquiriesValidation.PropertyCode);
                strng.CPL = selectedProperty;

                strng.GuestName         = inquiriesValidation.GuestName;
                strng.InquiryTeam       = inquiriesValidation.InquiryTeam;
                strng.Channel           = inquiriesValidation.Channel;
                strng.Check_inDate      = inquiriesValidation.Check_inDate;
                strng.Check_outDate     = inquiriesValidation.Check_outDate;
                strng.Weekdayorphandays = inquiriesValidation.Weekdayorphandays;
                strng.TotalPayout       = inquiriesValidation.TotalPayout;
                strng.AdditionalInfo_StatusofInquiry = inquiriesValidation.AdditionalInfo_StatusofInquiry;
                strng.Check_InDay  = inquiriesValidation.Check_inDate.Value.DayOfWeek.ToString();
                strng.Check_OutDay = inquiriesValidation.Check_outDate.Value.DayOfWeek.ToString();
                if (inquiriesValidation.Check_outDate != null)
                {
                    strng.DaysOut = (inquiriesValidation.Check_outDate.Value - strng.InquiryCreatedTimestamp).Value.Days;
                }
                if (inquiriesValidation.Check_outDate != null)
                {
                    strng.LengthofStay = (inquiriesValidation.Check_outDate.Value - inquiriesValidation.Check_inDate).Value.Days;
                }
                strng.NightlyRate = (((inquiriesValidation.TotalPayout.Value / (decimal)0.97) - strng.CPL.CleaningFees) / strng.LengthofStay);

                _dbContext.SaveChanges();

                return(RedirectToAction("Index"));
            }
            ViewBag.Properties = (new PropertyProvider(_dbContext)).AggregatedProperties();
            return(View(inquiriesValidation));
        }
コード例 #20
0
        public static InquiriesValidation ToInquiriesValidation(this string[] s)
        {
            InquiriesValidation IV = new InquiriesValidation();

            //IV.IsUpload = true; TODO: check this one
            IV.GuestName                      = s[0];
            IV.InquiryTeam                    = s[1];
            IV.AirBnBListingTitle             = s[2];
            IV.PropertyCode                   = s[3];
            IV.Channel                        = s[4];
            IV.BookingGuidelines              = s[5];
            IV.AdditionalInfo_StatusofInquiry = s[6];
            IV.AirBnBURL                      = s[7];
            IV.Bedrooms                       = s[8].ToNullableInt32();
            IV.Account                        = s[9];
            IV.InquiryCreatedTimestamp        = AddNulldableDate(s[10].ToDateTime(), s[11].ToDateTime());
            //IV.InquiryTime__PST_ = s[11].ToDateTime();
            IV.Check_inDate      = s[12].ToDateTime();
            IV.Check_InDay       = s[13];
            IV.Check_outDate     = s[14].ToDateTime();
            IV.Check_OutDay      = s[15];
            IV.TotalPayout       = s[16].ToNullabledecimal();
            IV.Weekdayorphandays = s[17].ToNullableInt32();

            IV.DaysOutPoints      = s[19].ToNullableInt32();
            IV.LengthofStay       = s[20].ToNullableInt32();
            IV.LengthofStayPoints = s[21].ToNullableInt32();
            IV.OpenWeekdaysPoints = s[22].ToNullableInt32();
            IV.NightlyRate        = s[23].ToNullabledecimal();
            //IV.Cleaning_Fee = s[24].ToNullabledecimal();
            IV.Doesitrequire2pricingteamapprovals = s[25];
            //IV.DoesitrequireInquiryTeamLeadapproval = s[26];
            IV.TotalPoints         = s[27].ToNullableInt32();
            IV.OwnerApprovalNeeded = s[28];
            IV.ApprovedbyOwner     = s[29];
            IV.PricingApprover1    = s[31];
            IV.PricingDecision1    = s[32];
            IV.PricingReason1      = s[33];
            //IV.PricingApprover2 = s[33];
            //IV.PricingDecision2 = s[34];
            //IV.PricingReason2 = s[35];
            //IV.PricingTeamTimeStamp = s[36];
            //IV.InquiryAge = s[37].ToNullableInt32();
            //IV.Daystillcheckin = s[38];
            //calculated
            if (IV.Check_inDate.HasValue && IV.InquiryCreatedTimestamp.HasValue)
            {
                IV.DaysOut = (int)(IV.Check_inDate.Value - IV.InquiryCreatedTimestamp.Value).TotalDays;
            }
            else
            {
                IV.DaysOut = s[18].ToNullableInt32();
            }

            if (IV.Check_inDate.HasValue && IV.Check_outDate.HasValue)
            {
                IV.LengthofStay = (int)(IV.Check_outDate.Value - IV.Check_inDate.Value).TotalDays;
            }
            else
            {
                IV.LengthofStay = s[20].ToNullableInt32();
            }

            return(IV);
        }
コード例 #21
0
        public JsonResult Save(InquiriesValidation form)
        {
            if (!AuthorizationProvider.IsInquiryEditor())
            {
                string message = string.Format("User '{0}' does not have permission to save Inquiry {1}.", this.User.Identity.Name, form.Id.ToString());
                DojoLogger.Warn(message, typeof(InquiryController));
                return(Json("denied", JsonRequestBehavior.AllowGet));
            }

            try
            {
                // treat checkin and checkout date as Hawaii time zone and covert it to UTC by adding 11 hours.
                if (form.Check_inDate != null)
                {
                    form.Check_inDate = form.Check_inDate.Value.Date.AddHours(11);
                }
                if (form.Check_outDate != null)
                {
                    form.Check_outDate = form.Check_outDate.Value.Date.AddHours(11);
                }

                InquiryProvider inquiryProvider = new InquiryProvider(_dbContext);

                string message = string.Format("saving inquiry: name: {0} team: {1} property: {2} checkin: {3} checkout: {4} payout: {5}",
                                               form.GuestName,
                                               form.InquiryTeam,
                                               (!string.IsNullOrEmpty(form.PropertyCode) ? form.PropertyCode : "Invalid"),
                                               (form.Check_inDate != null ? form.Check_inDate.Value.ToShortDateString() : "Invalid"),
                                               (form.Check_outDate != null ? form.Check_outDate.Value.ToShortDateString() : "Invalid"),
                                               (form.TotalPayout != null ? form.TotalPayout.Value.ToString() : "Invalid"));
                DojoLogger.Trace(message, typeof(InquiryController));

                if (form.Id == 0) // new inquiry
                {
                    if (inquiryProvider.Exist(form.PropertyCode, form.GuestName, form.Check_inDate.Value, form.Check_outDate.Value))
                    {
                        Response.StatusCode = (int)System.Net.HttpStatusCode.Conflict; // code = 409
                        return(Json(string.Empty, JsonRequestBehavior.AllowGet));
                    }
                    else
                    {
                        SetRelatedFields(form);
                        inquiryProvider.Create(form);
                    }
                }
                else // updating inquiry
                {
                    InquiriesValidation inquiry = inquiryProvider.Retrieve(form.Id);
                    SetRelatedFields(inquiry, form);
                    // need to set CreatedBy and CreatedDate a they are not part of form
                    form.CreatedDate = inquiry.CreatedDate;
                    form.CreatedBy   = inquiry.CreatedBy;
                    inquiryProvider.Update(inquiry.Id, inquiry);
                }

                inquiryProvider.Commit(); // Id will be filled for new inquiry by EF

                PropertyProvider propertyProvider = new PropertyProvider(_dbContext);
                ViewBag.Properties = propertyProvider.AggregatedProperties();
                return(Json(form.Id.ToString(), JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                string message = string.Format("Saving Inquiry {0} fails. {1}", form.Id.ToString(), ex.Message);
                DojoLogger.Error(message, typeof(InquiryController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json(string.Empty, JsonRequestBehavior.AllowGet));
            }
        }
コード例 #22
0
        public ActionResult Upload(HttpPostedFileBase file)
        {
            try
            {
                List <string[]> csvRows = new List <string[]>();
                if (file != null && file.ContentLength > 0)
                {
                    // extract only the filename
                    var fileName = Path.GetFileName(file.FileName);
                    // store the file inside ~/App_Data/uploads folder
                    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), Guid.NewGuid().ToString() + "_" + fileName);
                    file.SaveAs(path);
                    using (var reader = new StreamReader(System.IO.File.OpenRead(path)))
                    {
                        var parser             = new NetCSVParser();
                        var standartCollLength = reader.ReadLine().Split(',').Length;
                        while (!reader.EndOfStream)
                        {
                            var line = reader.ReadToEnd();
                            line.Replace(",#N/A,", ",null,");
                            List <string[]> values = new List <string[]>();
                            values = parser.Parse(path, standartCollLength, ",");
                            values.RemoveAt(0);
                            csvRows = values;
                        }
                    }
                }

                if (csvRows.Count > 0)
                {
                    int expectedLength = csvRows[0].Length;
                    foreach (var item in csvRows)
                    {
                        if (item.Length != expectedLength)
                        {
                            throw new ArgumentException("CSV file is invalid");
                        }
                    }
                }

                if (csvRows.Count() < 1)
                {
                    throw new ArgumentException("File is empty or invalid");
                }

                Dictionary <String, CPL> cplDictionary = _dbContext.CPLs.ToDictionary(x => x.PropertyCode);

                int skippedRows = 0;
                for (int i = 0; i < csvRows.Count; i++)
                {
                    InquiriesValidation str = csvRows[i].ToInquiriesValidation();

                    if (!cplDictionary.ContainsKey(str.PropertyCode))
                    {
                        skippedRows++;
                        continue;
                    }

                    str.CPL = cplDictionary[str.PropertyCode];
                    _dbContext.InquiriesValidations.Add(str);
                }
                saveShowErrors(_dbContext);
                ViewBag.UploadMessage = "Data is succesfully uploaded." + (csvRows.Count - skippedRows) + " rows added, " + skippedRows + " rows skipped (no property code found)";
                return(View());
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMessage = "Error while uploading data: " + ex.GetType().Name + ".";

                string message = ViewBag.ErrorMessage + ex.Message;
                RDTLogger.Info(message, typeof(InquiriesValidationController));
                return(View());
            }
        }