public async Task <IHttpActionResult> ZumReponierenBereit([FromBody] AbbrechenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            AssertUserHasFeatureForOrderingType(p.OrderItemIds.ToArray(), access, ApplicationFeature.AuftragsuebersichtAuftraegeKannReponieren, null);

            await orderManagerClient.ZumReponierenBereit(ControllerHelper.GetCurrentUserId(), p.OrderItemIds);

            return(Content <object>(HttpStatusCode.NoContent, null));
        }
        public async Task <IHttpActionResult> AuftraegeAusleihen([FromBody] AuftraegeAusleihenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            if (!access.HasFeature(ApplicationFeature.AuftragsuebersichtAuftraegeKannAuftraegeAusleihen))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            await orderManagerClient.AuftraegeAusleihen(ControllerHelper.GetCurrentUserId(), p.OrderItemIds);

            return(Content <object>(HttpStatusCode.NoContent, null));
        }
        public async Task <IHttpActionResult> Abbrechen([FromBody] AbbrechenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            AssertUserHasFeatureForOrderingType(p.OrderItemIds.ToArray(), access,
                                                ApplicationFeature.AuftragsuebersichtAuftraegeKannAbbrechen,
                                                ApplicationFeature.AuftragsuebersichtEinsichtsgesucheKannAbbrechen);

            await orderManagerClient.Abbrechen(ControllerHelper.GetCurrentUserId(), p.OrderItemIds, p.Abbruchgrund, p.BemerkungZumDossier,
                                               p.InterneBemerkung);

            return(Content <object>(HttpStatusCode.NoContent, null));
        }
        public async Task <IHttpActionResult> EinsichtsgesucheInVorlageExportieren([FromBody] InVorlageExportierenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            if (!access.HasFeature(ApplicationFeature.AuftragsuebersichtEinsichtsgesucheInVorlageExportieren))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            await orderManagerClient.InVorlageExportieren(ControllerHelper.GetCurrentUserId(), p.OrderItemIds, p.Vorlage, p.Sprache);

            return(Content <object>(HttpStatusCode.NoContent, null));
        }
        public async Task <IHttpActionResult> GetOrderingDetailItem(int id)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            if (!access.HasFeature(ApplicationFeature.AuftragsuebersichtAuftraegeView))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            var item = await GetOrderingDetailItemInternal(id);

            return(Ok(item));
        }
        public async Task <IHttpActionResult> EinsichtsgesucheEntscheidGesuchHinterlegen([FromBody] EntscheidGesuchHinterlegenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            if (!access.HasFeature(ApplicationFeature.AuftragsuebersichtEinsichtsgesucheKannEntscheidGesuchHinterlegen))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            await orderManagerClient.EntscheidGesuchHinterlegen(ControllerHelper.GetCurrentUserId(), p.OrderItemIds, p.Entscheid, p.DatumEntscheid,
                                                                p.InterneBemerkung);

            return(Content <object>(HttpStatusCode.NoContent, null));
        }
        private List <DetailField> GetOrderingFieldsInternal(ModulFunktionsblock modulFunktionsblock)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            var retFields = new List <DetailField>();

            var fields = typeof(OrderingFlatItem).GetProperties();

            foreach (var field in fields)
            {
                var isReadonly = true;
                IEditRequiresFeatureAttribute attr;
                switch (modulFunktionsblock)
                {
                case ModulFunktionsblock.AuftragsuebersichAuftraege:
                    attr = field.GetCustomAttributes(true).OfType <EditAuftragRequiresFeatureAttribute>().FirstOrDefault();
                    break;

                case ModulFunktionsblock.AuftragsuebersichEinsichtsgesuch:
                    attr = field.GetCustomAttributes(true).OfType <EditEinsichtsgesuchRequiresFeatureAttribute>().FirstOrDefault();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (attr != null)
                {
                    var features = attr.RequiredFeatures;
                    if (features.Any(f => access.HasFeature(f)))
                    {
                        isReadonly = false;
                    }
                }

                var name = field.Name;
                retFields.Add(new DetailField
                {
                    Name       = name,
                    IsReadonly = isReadonly
                });
            }

            return(retFields);
        }
        public async Task <IHttpActionResult> GetAushebungsauftraegeHtml([FromUri] int[] orderItemIds)
        {
            var builder = new DataBuilder(bus);
            var access  = ManagementControllerHelper.GetUserAccess();

            access.AssertFeatureOrThrow(ApplicationFeature.AuftragsuebersichtAuftraegeKannAushebungsauftraegeDrucken);

            var expando = builder
                          .AddUser(access.UserId)
                          .AddAuftraege(orderItemIds)
                          .Create();

            var    template = parameterHelper.GetSetting <AushebungsauftraegeTemplate>();
            string html     = mailHelper.TransformToHtml(template.HtmlTemplate, expando);

            await orderManagerClient.AushebungsauftraegeDrucken(access.UserId, orderItemIds.ToList());

            return(Ok(html));
        }
        public async Task <IHttpActionResult> DigitalisierungAusloesen([FromBody] DigitalisierungAusloesenParams p)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            if (!access.HasFeature(ApplicationFeature.AuftragsuebersichtEinsichtsgesucheDigitalisierungAusloesenAusfuehren))
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            var items = GetItemsToCheck(p.OrderItemIds.ToArray());

            if (!HasEinsichtsgesuche(items))
            {
                return(BadRequest("Funktion ist nur für Einsichtsgesuche gestattet"));
            }

            var snapshots = new List <OrderingIndexSnapshot>();

            foreach (var item in items)
            {
                if (!item.VeId.HasValue)
                {
                    return(BadRequest("Formularbestellungen sind in dieser Funktion nicht zulässig"));
                }

                var elasticItem = await GetElasticArchiveRecord(item.VeId.Value.ToString());

                if (elasticItem == null)
                {
                    throw new Exception($"Ve with ID {item.VeId.Value} not found");
                }

                var snapshot = OrderHelper.GetOrderingIndexSnapshot(elasticItem);
                snapshots.Add(snapshot);
            }

            var statusUebergangSettings = parameterHelper.GetSetting <StatusUebergangSettings>();
            await orderManagerClient.DigitalisierungAusloesen(access.UserId, snapshots.ToArray(),
                                                              statusUebergangSettings.ArtDerArbeitIdFuerDigitalisierungAusloesen);

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task <IHttpActionResult> NichtSichtbarEinsehen(int id)
        {
            var access = ManagementControllerHelper.GetUserAccess();

            var detail = await GetOrderingDetailItemInternal(id, true);

            if (detail?.Item == null)
            {
                return(NotFound());
            }

            // we need the ordering type of the result to check, what feature the user must have
            if (detail.Item.OrderingType == (int)OrderType.Einsichtsgesuch)
            {
                access.AssertFeatureOrThrow(ApplicationFeature.AuftragsuebersichtEinsichtsgesucheViewNichtSichtbar);
            }
            else
            {
                access.AssertFeatureOrThrow(ApplicationFeature.AuftragsuebersichtAuftraegeViewNichtSichtbar);
            }

            return(Ok(detail));
        }
        public IHttpActionResult GetVersandkontrolleHtml([FromUri] int[] orderItemIds)
        {
            try
            {
                var builder = new DataBuilder(bus);
                var access  = ManagementControllerHelper.GetUserAccess();
                access.AssertFeatureOrThrow(ApplicationFeature.AuftragsuebersichtAuftraegeVersandkontrolleAusfuehren);
                var expando = builder
                              .AddUser(access.UserId)
                              .AddBestellerMitAuftraegen(orderItemIds)
                              .Create();

                var    template = parameterHelper.GetSetting <VersandkontrolleTemplate>();
                string html     = mailHelper.TransformToHtml(template.HtmlTemplate, expando);

                return(Ok(html));
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
                Console.WriteLine(e);
                throw;
            }
        }