public ServiceAddressEdit()
        {
            this.RequiresAuthentication();

            Get["/serviceaddress/edit/{id}"] = parameters =>
            {
                string idString = parameters.id;
                var    address  = Database.Query <ServiceAddress>(idString);

                if (address != null)
                {
                    if (HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write))
                    {
                        return(View["View/serviceaddressedit.sshtml",
                                    new ServiceAddressEditViewModel(Translator, Database, address)]);
                    }
                }

                return(null);
            };
            Post["/serviceaddress/edit/{id}"] = parameters =>
            {
                string idString = parameters.id;
                var    model    = JsonConvert.DeserializeObject <ServiceAddressEditViewModel>(ReadBody());
                var    address  = Database.Query <ServiceAddress>(idString);
                var    status   = CreateStatus();

                if (status.ObjectNotNull(address))
                {
                    if (status.HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write))
                    {
                        status.AssignStringRequired("Address", address.Address, model.Address);
                        status.AssignEnumIntString("Category", address.Category, model.Category);

                        if (status.IsSuccess)
                        {
                            Database.Save(address);
                            switch (address.Service.Value)
                            {
                            case ServiceType.EMail:
                                Journal(address.Contact,
                                        "ServiceAddress.EMail.Journal.Edit",
                                        "Journal entry changed mail address",
                                        "Changed mail address {0}",
                                        t => address.GetText(t));
                                break;

                            case ServiceType.Phone:
                                Journal(address.Contact,
                                        "ServiceAddress.Phone.Journal.Edit",
                                        "Journal entry changed phone number",
                                        "Changed phone number {0}",
                                        t => address.GetText(t));
                                break;

                            default:
                                throw new NotSupportedException();
                            }
                        }
                    }
                }

                return(status.CreateJsonData());
            };
            Get["/serviceaddress/add/phone/{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/serviceaddressedit.sshtml",
                                    new ServiceAddressEditViewModel(Translator, Database, contact, ServiceType.Phone)]);
                    }
                }

                return(null);
            };
            Get["/serviceaddress/add/mail/{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/serviceaddressedit.sshtml",
                                    new ServiceAddressEditViewModel(Translator, Database, contact, ServiceType.EMail)]);
                    }
                }

                return(null);
            };
            Post["/serviceaddress/add/{id}"] = parameters =>
            {
                string idString = parameters.id;
                var    model    = JsonConvert.DeserializeObject <ServiceAddressEditViewModel>(ReadBody());
                var    contact  = Database.Query <Contact>(idString);
                var    status   = CreateStatus();

                if (status.ObjectNotNull(contact))
                {
                    var address = new ServiceAddress(Guid.NewGuid());
                    status.AssignStringRequired("Address", address.Address, model.Address);
                    status.AssignEnumIntString("Category", address.Category, model.Category);
                    status.AssignEnumIntString("Service", address.Service, model.Service);
                    address.Precedence.Value = contact.PostalAddresses.MaxOrDefault(a => a.Precedence.Value, 0) + 1;
                    address.Contact.Value    = contact;

                    if (status.IsSuccess)
                    {
                        Database.Save(address);
                        switch (address.Service.Value)
                        {
                        case ServiceType.EMail:
                            Journal(address.Contact,
                                    "ServiceAddress.EMail.Journal.Add",
                                    "Journal entry added mail address",
                                    "Added mail address {0}",
                                    t => address.GetText(t));
                            break;

                        case ServiceType.Phone:
                            Journal(address.Contact,
                                    "ServiceAddress.Phone.Journal.Add",
                                    "Journal entry added phone number",
                                    "Added phone number {0}",
                                    t => address.GetText(Translator));
                            break;

                        default:
                            throw new NotSupportedException();
                        }
                    }
                }

                return(status.CreateJsonData());
            };
            Get["/serviceaddress/delete/{id}"] = parameters =>
            {
                string idString = parameters.id;
                var    address  = Database.Query <ServiceAddress>(idString);
                var    status   = CreateStatus();

                if (status.ObjectNotNull(address))
                {
                    if (status.HasAccess(address.Contact.Value, PartAccess.Contact, AccessRight.Write))
                    {
                        Database.Delete(address);
                        switch (address.Service.Value)
                        {
                        case ServiceType.EMail:
                            Journal(address.Contact,
                                    "ServiceAddress.EMail.Journal.Delete",
                                    "Journal entry deleted mail address",
                                    "Deleted mail address {0}",
                                    t => address.GetText(Translator));
                            break;

                        case ServiceType.Phone:
                            Journal(address.Contact,
                                    "ServiceAddress.Phone.Journal.Delete",
                                    "Journal entry deleted phone number",
                                    "Deleted phone number {0}",
                                    t => address.GetText(Translator));
                            break;

                        default:
                            throw new NotSupportedException();
                        }
                    }
                }

                return(status.CreateJsonData());
            };
            Post["/serviceaddress/switch"] = parameters =>
            {
                var model  = JsonConvert.DeserializeObject <SwitchViewModel>(ReadBody());
                var source = Database.Query <ServiceAddress>(model.SourceId);
                var status = CreateStatus();

                if (status.ObjectNotNull(source) &&
                    Guid.TryParse(model.TargetId, out Guid targetId))
                {
                    if (status.HasAccess(source.Contact.Value, PartAccess.Contact, AccessRight.Write))
                    {
                        var target = source.Contact.Value.ServiceAddresses
                                     .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;

                            Database.Save(source.Contact);
                            switch (source.Service.Value)
                            {
                            case ServiceType.EMail:
                                Journal(source.Contact,
                                        "ServiceAddress.EMail.Journal.Switch",
                                        "Journal entry deleted mail address",
                                        "Switched mail addresses {0} and {1}",
                                        t => source.GetText(t),
                                        t => target.GetText(t));
                                break;

                            case ServiceType.Phone:
                                Journal(source.Contact,
                                        "ServiceAddress.Phone.Journal.Delete",
                                        "Journal entry deleted phone Switch",
                                        "Switched phone numbers {0} and {1}",
                                        t => source.GetText(t),
                                        t => target.GetText(t));
                                break;

                            default:
                                throw new NotSupportedException();
                            }
                        }
                    }
                }
                else
                {
                    status.SetErrorNotFound();
                }

                return(status.CreateJsonData());
            };
        }
Exemplo n.º 2
0
        public ServiceAddressViewModel(Translator translator, ServiceAddress address)
        {
            Id   = address.Id.ToString();
            Text = address.Address.Value.EscapeHtml();

            switch (address.Service.Value)
            {
            case ServiceType.EMail:
                PhraseDeleteConfirmationQuestion = translator.Get("Contact.Detail.Master.Mail.Delete.Confirm.Question", "Delete E-Mail address confirmation question", "Do you really wish to delete E-Mail address {0}?", address.GetText(translator)).EscapeHtml();
                break;

            case ServiceType.Phone:
                PhraseDeleteConfirmationQuestion = translator.Get("Contact.Detail.Master.Phone.Delete.Confirm.Question", "Delete phone number confirmation question", "Do you really wish to delete phone number {0}?", address.GetText(translator)).EscapeHtml();
                break;

            default:
                throw new NotSupportedException();
            }
        }