//Burada Kaldık Sayfa geliyor fakat enum olarak sadece arızalarla alakalı bir enum yapmak gerekiyor. Çalışan enumlarda atanmadı vs seçebiliyor.
        public ActionResult TeknisyenArizaRapor(int id)
        {
            try
            {
                var ariza = new ArizaKayitRepo().GetById(id);
                var data  = Mapper.Map <ArizaViewModel>(ariza);
                data.ArızaPath = new FotografRepo().GetAll(z => z.ArizaId == id).Select(u => u.Yol).ToList();
                //ilgili log kayıtları getiriyor. o arizaya ait.
                var Logs = new ArizaLogRepo().GetAll()
                           .Where(u => u.ArızaId == id)
                           .OrderByDescending(u => u.CreatedDate)
                           .ToList();
                data.ArizaLogs.Clear();

                //data.ArizaLogViewModels.Clear();
                //gelen logkayitlarini mapper ile view model e çevirip. arizaviewmoedeki alana ekliyoruz.
                //BURADA VİEWMODEL YAPAMADIK NEDEN BAK SOR ...
                foreach (ArizaLOG log in Logs)
                {
                    data.ArizaLogs.Add(log);
                }
                return(View(data));
            }
            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Home",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
        public ActionResult ArizaDurumGor(int id)
        {
            try
            {
                var ariza = new ArizaKayitRepo().GetById(id);
                var data  = Mapper.Map <ArizaViewModel>(ariza);
                data.ArızaPath = new FotografRepo().GetAll(z => z.ArizaId == id).Select(u => u.Yol).ToList();
                //ilgili log kayıtları getiriyor. o arizaya ait.
                var Logs = new ArizaLogRepo().GetAll()
                           .Where(u => u.ArızaId == id)
                           .OrderByDescending(u => u.CreatedDate)
                           .ToList();
                data.ArizaLogs.Clear();

                foreach (ArizaLOG log in Logs)
                {
                    data.ArizaLogs.Add(log);
                }
                return(View(data));
            }
            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Home",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
        //TODO TEknisyen atamayı burada yap
        public async Task <IHttpActionResult> TeknisyenAta(ArizaViewModel model)
        {
            try
            {
                var ariza = new ArizaKayitRepo().GetById(model.ArizaId);
                ariza.TeknisyenId            = model.UserId;
                ariza.ArizaDurumu            = ArizaDurum.TeknisyenAtandi;
                ariza.TeknisyenDurumu        = TeknisyenDurumu.Calısıyor;
                ariza.TeknisyenAtandigiTarih = DateTime.Now;
                var responce = new ArizaKayitRepo().Update(ariza);
                if (responce < 1)
                {
                    return(Ok(new ResponseData
                    {
                        message = $"Ariza Kayıt Update Edilemedi.",
                        success = false,
                    }));
                }

                var opId         = HttpContext.Current.User.Identity.GetUserId();
                var teknisyen    = NewUserManager().FindById(ariza.TeknisyenId);
                var userOperator = NewUserManager().FindById(opId);
                var musteri      = NewUserManager().FindById(ariza.MusteriId);

                var OperatorLog = new ArizaLOG
                {
                    CreatedDate = DateTime.Now,
                    ArızaId     = model.ArizaId,
                    Aciklama    = $"Ariza'nız {userOperator.Name} {userOperator.Surname} isimli Operator Tarafından {teknisyen.Name} {teknisyen.Surname} Teknisyene Bildirilmiştir.",
                    YapanınRolu = IdentityRoles.Teknisyen
                };
                var Logresponce = new ArizaLogRepo().Insert(OperatorLog);

                if (Logresponce < 1)
                {
                    return(Ok(new ResponseData
                    {
                        message = $"Log kayıt Eklenemedi",
                        success = false,
                    }));
                }

                string SiteUrl = Request.RequestUri.Scheme + Uri.SchemeDelimiter + Request.RequestUri.Host +
                                 (Request.RequestUri.IsDefaultPort ? "" : ":" + Request.RequestUri.Port);
                var emailService = new EmailService();

                // teknisyene Mail gönderiyor test ok.
                #region TEKNİSYENE MAİL GÖNDERME OK

                var body = $"Merhaba <b> {teknisyen.Name} {teknisyen.Surname}</b><br>  Size {userOperator.Name} {userOperator.Surname} isimli çalışanımız tarafından bir Arıza Gönderilmiştir.  Aşagıdaki Linke tıklayarak arızayı detaylı bir şekilde görebilirsiniz..<br>İyi Çalışmalar dileriz. FiTech <br> <a href='{SiteUrl}/Teknisyen/TeknisyenArizaRapor/{ariza.Id}' >Arıza Detayları için tıklayınız. </a> ";
                await emailService.SendAsync(new IdentityMessage()
                {
                    Body    = body,
                    Subject = "Ariza İş Bildirimi"
                }, teknisyen.Email);

                #endregion

                #region MÜSTERİYE MAİL GÖNDERME
                var bodyMusteri = $"Merhaba <b> {musteri.Name} {musteri.Surname}</b><br>  Sizin Acmıs oldugunuz {ariza.Id}'nolu kayıta {teknisyen.Name} {teknisyen.Surname} isimli çalışanımız yönlendirilmiştir<br> Fitech İyi Günler Diler.</a> ";
                await emailService.SendAsync(new IdentityMessage()
                {
                    Body    = bodyMusteri,
                    Subject = "Ariza Teknisyen Bilgisi"
                }, model.Email);


                #endregion

                return(Ok(new ResponseData()
                {
                    success = true,
                    message = $"Tüm işlemler başarılı bir şekilde gerçekleştri"
                }));
            }

            catch (Exception ex)
            {
                return(BadRequest($"Bir hata olustu{ex.Message}"));
            }
        }
        public async Task <IHttpActionResult> ArizaKabul(int id)
        {
            // Nasıl alınır opId bilmiyorm.
            var OpertatorId = HttpContext.Current.User.Identity.GetUserId();

            try
            {
                var ariza    = await new ArizaKayitRepo().GetByIdAsync(id);
                var Operator = await NewUserManager().FindByIdAsync(OpertatorId);

                if (ariza == null)
                {
                    return(Ok(new ResponseData
                    {
                        message = $"Kayıt Bulunamadı",
                        success = false,
                    }));
                }
                else
                {
                    ariza.OperatorKabulTarih = DateTime.Now;
                    ariza.OperatorKabul      = true;
                    ariza.OperatorId         = OpertatorId;
                    ariza.ArizaDurumu        = ArizaDurum.OperatorTakibeAldı;
                    var updatesonuc = new ArizaKayitRepo().Update(ariza);
                    if (updatesonuc < 1)
                    {
                        return(Ok(new ResponseData
                        {
                            message = $"Ariza Kayit Başarısz",
                            success = false,
                        }));
                    }

                    var OperatorLog = new ArizaLOG
                    {
                        CreatedDate = DateTime.Now,
                        ArızaId     = id,
                        Aciklama    =
                            $"Ariza'nız {Operator.Name} {Operator.Surname} isimli Operator Tarafından Onaylanmıştır.",
                        YapanınRolu = IdentityRoles.Teknisyen
                    };
                    var responce = new ArizaLogRepo().Insert(OperatorLog);
                    if (responce < 1)
                    {
                        return(Ok(new ResponseData
                        {
                            message = $"ArızaLog Başarısz",
                            success = false,
                        }));
                    }
                    return(Ok(new ResponseData
                    {
                        message = $"Atama ve log işlemleri başaarılı",
                        success = true,
                    }));
                    //TODO Müşteriye Mail gönderilir bilgilendirme belki
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"Bir hata oluştu {ex.Message}"));
            }
        }