public async Task <ExSaveDataResult> DeleteMeetingWeb([FromBody] ExRemoveMeetingRequest request)
        {
            if (request.CheckPassword != WebAppSettings.CheckPassword)
            {
                HttpContext.Response.StatusCode = Unauthorized().StatusCode;
                return(null);
            }

            return(await DeleteMeetingInternal(request));
        }
        public async Task <ExSaveDataResult> DeleteMeeting([FromBody] ExRemoveMeetingRequest request)
        {
            var authfailed = true;

            ClaimsIdentity identity = null;

            try
            {
                identity = HttpContext.User.Identity as ClaimsIdentity;
            }
            catch (Exception e)
            {
                Logging.Log.LogError("No Claims identity");
            }

            if (identity != null)
            {
                var claims = identity.Claims;

                if (identity.HasClaim(c => c.Type == "UserID"))
                {
                    var userId = identity.HasClaim(c => c.Type == "UserID")
                        ? identity.FindFirst("UserID").Value
                        : "a"; //BENUTZER ID

                    if (request.UserId.ToString() == userId)
                    {
                        authfailed = false;
                    }
                }
            }

            if (authfailed)
            {
                if (request.CheckPassword != WebAppSettings.CheckPassword)
                {
                    HttpContext.Response.StatusCode = Unauthorized().StatusCode;
                    return(null);
                }
            }

            return(await DeleteMeetingInternal(request));
        }
        public async Task <IActionResult> DeleteConfirmed(int id)
        {
            var tableAppointment = await _context.TblAppointments.FindAsync(id);

            var tbUser = await _context.TblUsers.AsNoTracking().FirstOrDefaultAsync(a => a.Id == tableAppointment.UserId);

            RestAccess ra = new RestAccess(tbUser.Id.ToString(), tbUser.RestPasswort, Constants.ServiceClientEndPointWithApiPrefix);

            var r = new ExRemoveMeetingRequest
            {
                MeetingId     = id,
                UserId        = tableAppointment.UserId,
                UserType      = EnumUserType.ShopEmployee,
                CheckPassword = WebAppSettings.CheckPassword,
            };

            var xxx = await ra.DeleteMeetingWeb(r);

            return(RedirectToAction(nameof(Index)));
        }
        /// <summary>
        ///     Termin entfernen
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private async Task <ExSaveDataResult> DeleteMeetingInternal([FromBody] ExRemoveMeetingRequest request)
        {
            using (var db = new Db())
            {
                var meeting = db.TblAppointments
                              .Include(x => x.Employee)
                              .Include(x => x.Employee).ThenInclude(x => x.Store)
                              .Include(x => x.User)
                              .FirstOrDefault(x => x.Id == request.MeetingId);

                if (meeting.UserId != request.UserId && request.UserType == EnumUserType.Customer)
                {
                    return(new ExSaveDataResult
                    {
                        Result = EnumSaveDataResult.Error,
                        Caption = "Nicht möglich!",
                        Description = "Nur der Ersteller des Termins kann diesen auch wieder löschen!"
                    });
                }

                meeting.Canceled = true;
                try
                {
                    switch (request.UserType)
                    {
                    //Kunde hat den Termin storniert => E-Mail an Shop als Info
                    case EnumUserType.Customer:
                        string shopEMail    = meeting.Employee.Store.EMail;
                        string userName     = $"{meeting.User.Firstname} {meeting.User.Lastname}";
                        string emailContent = $"Leider hat {(String.IsNullOrEmpty(userName.Trim()) ? "UNBEKANNT" : userName)} den Termin am {meeting.ValidFrom.AddHours(2):dd.MM.yyy} um {meeting.ValidFrom.AddHours(2):HH:mm} absagen müssen.";
                        string employeeTel  = meeting.Employee.TelephoneNumber;

                        string email = _mailgenerator.GetStornoAppointmentShopEmail(new ExEMailStornoAppointmentShop
                        {
                            Message = emailContent
                        });
                        BissEMail bm  = new BissEMail(WebAppSettings.EmailCredentials);
                        var       res = await bm.SendHtmlEMail(Constants.SendEMailAs, new List <string> {
                            shopEMail
                        }, "Termin-Storno", email, Constants.SendEMailAsDisplayName);

                        //ToDo: Umstellung auf Push sobald möglich
                        //Common.SendSMS(employeeTel, $"{emailContent} Auf diese SMS kann nicht geantwortet werden.");

                        break;


                    //Shop musst den Termin stonieren => SMS an Kunden als Info
                    //ToDo: Umstellung auf Push sobald möglich
                    case EnumUserType.ShopEmployee:
                        string telCustomer  = meeting.User.PhoneNumber;
                        string employeeName = $"{meeting.Employee.FirstName} {meeting.Employee.LastName}";
                        string smsContent   = $"Leider hat {(String.IsNullOrEmpty(employeeName.Trim()) ? "UNBEKANNT" : employeeName)} von {meeting.Employee.Store.CompanyName} den Termin am {meeting.ValidFrom.AddHours(2):dd.MM.yyy} um {meeting.ValidFrom.AddHours(2):HH:mm} absagen müssen. Du kannst gerne wieder einen neuen Termin über die App vereinbaren. Auf diese SMS kann nicht geantwortet werden.";
                        Common.SendSMS(telCustomer, smsContent);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                catch (Exception e)
                {
                    Logging.Log.LogWarning($"Could not inform customer or shop about chanceled appointment: {e}");
                }

                try
                {
                    await db.SaveChangesAsync();

                    return(ExSaveDataResult.GetDefaultSuccess());
                }
                catch (Exception e)
                {
                    Logging.Log.LogError($"{e}");
                    return(ExSaveDataResult.GetDefaultSaveError());
                }
            }
        }
Beispiel #5
0
 /// <summary>
 ///     Termin entfernen für WEbApp
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public async Task <ResultData <ExSaveDataResult> > DeleteMeetingWeb(ExRemoveMeetingRequest request)
 {
     return(await _wap.Post <ExSaveDataResult>("DeleteMeetingWeb", request));
 }