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());
            };
        }
示例#2
0
 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();
 }