public PostalAddressEdit() { this.RequiresAuthentication(); Get["/postaladdress/edit/{id}"] = parameters => { string idString = parameters.id; var address = Database.Query <PostalAddress>(idString); if (address != null) { if (HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write)) { return(View["View/postaladdressedit.sshtml", new PostalAddressEditViewModel(Translator, Database, address)]); } } return(null); }; Post["/postaladdress/edit/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <PostalAddressEditViewModel>(ReadBody()); var address = Database.Query <PostalAddress>(idString); var status = CreateStatus(); if (status.ObjectNotNull(address)) { if (status.HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write)) { status.AssignStringFree("CareOf", address.CareOf, model.CareOf); status.AssignStringFree("Street", address.Street, model.Street); status.AssignStringFree("PostOfficeBox", address.PostOfficeBox, model.PostOfficeBox); status.AssignStringFree("CareOf", address.PostalCode, model.PostalCode); status.AssignStringFree("PostalCode", address.Place, model.Place); status.AssignObjectIdString("State", address.State, model.State); status.AssignObjectIdString("Country", address.Country, model.Country); if (status.IsSuccess) { Database.Save(address); Journal(address.Contact, "PostalAddress.Journal.Edit", "Journal entry changed postal address", "Changed postal address {0}", t => address.GetText(t)); } } } return(status.CreateJsonData()); }; Get["/postaladdress/add/{id}"] = parameters => { string idString = parameters.id; var contact = Database.Query <Contact>(idString); if (contact != null) { if (HasAccess(contact, PartAccess.Contact, AccessRight.Write)) { return(View["View/postaladdressedit.sshtml", new PostalAddressEditViewModel(Translator, Database, contact)]); } } return(null); }; Post["/postaladdress/add/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <PostalAddressEditViewModel>(ReadBody()); var contact = Database.Query <Contact>(idString); var status = CreateStatus(); if (status.ObjectNotNull(contact)) { if (status.HasAccess(contact, PartAccess.Contact, AccessRight.Write)) { var address = new PostalAddress(Guid.NewGuid()); status.AssignStringFree("CareOf", address.CareOf, model.CareOf); status.AssignStringFree("Street", address.Street, model.Street); status.AssignStringFree("PostOfficeBox", address.PostOfficeBox, model.PostOfficeBox); status.AssignStringFree("CareOf", address.PostalCode, model.PostalCode); status.AssignStringFree("PostalCode", address.Place, model.Place); status.AssignObjectIdString("State", address.State, model.State); status.AssignObjectIdString("Country", address.Country, model.Country); address.Precedence.Value = contact.PostalAddresses.MaxOrDefault(a => a.Precedence.Value, 0) + 1; address.Contact.Value = contact; if (status.IsSuccess) { Database.Save(address); Journal(address.Contact, "PostalAddress.Journal.Add", "Journal entry adding postal address", "Added postal address {0}", t => address.GetText(t)); } } } return(status.CreateJsonData()); }; Get["/postaladdress/delete/{id}"] = parameters => { string idString = parameters.id; var address = Database.Query <PostalAddress>(idString); var status = CreateStatus(); if (status.ObjectNotNull(address)) { if (status.HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write)) { address.Delete(Database); Journal(address.Contact, "PostalAddress.Journal.Delete", "Journal entry deleting postal addresses", "Deleted postal address {0}", t => address.GetText(t)); } } return(status.CreateJsonData()); }; Post["/postaladdress/switch"] = parameters => { var model = JsonConvert.DeserializeObject <SwitchViewModel>(ReadBody()); var source = Database.Query <PostalAddress>(model.SourceId); var status = CreateStatus(); if (status.ObjectNotNull(source)) { if (Guid.TryParse(model.TargetId, out Guid targetId)) { if (status.HasAccess(source.Contact.Value, PartAccess.Contact, AccessRight.Write)) { var target = source.Contact.Value.PostalAddresses .FirstOrDefault(a => a.Id.Equals(targetId)); if (status.ObjectNotNull(target)) { var sourcePrecedence = source.Precedence.Value; var targetPrecedence = target.Precedence.Value; source.Precedence.Value = targetPrecedence; target.Precedence.Value = sourcePrecedence; if (source.Dirty || target.Dirty) { Database.Save(source.Contact); Journal(source.Contact, "PostalAddress.Journal.Switch", "Journal entry switching two postal addresses", "Changed precedence between postal addresses {0} and {1}", t => source.GetText(t), t => target.GetText(t)); } } } } else { status.SetErrorNotFound(); } } return(status.CreateJsonData()); }; }
public PostalAddressViewModel(Translator translator, PostalAddress address) { Id = address.Id.ToString(); Text = string.Join("<br/>", address.Elements.Select(e => e.EscapeHtml())); PhraseDeleteConfirmationQuestion = translator.Get("Contact.Detail.Master.PostalAddresses.Delete.Confirm.Question", "Delete postal address confirmation question", "Do you really wish to delete postal address {0}?", address.GetText(translator)).EscapeHtml(); }