public ActionResult ArizaList()
        {
            //operator bulunuyor ve o operatorun aldıgı kayıtlar listelenip çekiliyor.
            var operatorId = HttpContext.User.Identity.GetUserId();

            try
            {
                var data = new ArizaKayitRepo()
                           .GetAll(x => x.OperatorId == operatorId)
                           .Select(x => Mapper.Map <ArizaViewModel>(x))
                           .OrderBy(x => x.ArizaOlusturmaTarihi)
                           .ToList();
                return(View(data));
            }
            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Admin",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
Esempio n. 2
0
        public ActionResult Detaylar(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction("Anasayfa"));
            }
            var listelenecek = new ArizaKayitRepo().GetById(id.Value);

            if (listelenecek == null)
            {
                return(RedirectToAction("Anasayfa"));
            }
            var model = new ArizaViewModel()
            {
                UyeId       = listelenecek.UyeId,
                UyeAdı      = listelenecek.Uye.Ad + " " + listelenecek.Uye.Soyad,
                Email       = listelenecek.Email,
                TelNo       = listelenecek.TelNo,
                Mesaj       = listelenecek.Mesaj,
                LocationX   = listelenecek.LocationX,
                LocationY   = listelenecek.LocationY,
                TeknisyenID = listelenecek.TeknisyenID,
            };

            return(View(model));
        }
        //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"));
            }
        }
Esempio n. 4
0
        public static string TeknisyenBilgiPuanıGetir(string TeknisyenId)
        {
            var ToplamPuan = 0.0;
            var teknisyen  = NewUserManager().FindById(TeknisyenId);

            if (teknisyen == null)
            {
                return("0");
            }
            var arizalar = new ArizaKayitRepo().GetAll(x => x.TeknisyenId == TeknisyenId && x.AnketYapildimi == true)
                           .ToList();

            if (arizalar.Count <= 0)
            {
                return("Teknisyenin Puanı Yok");
            }

            foreach (var ariza in arizalar)
            {
                ToplamPuan += (int)ariza.TeknisyenBilgiPuani;
            }

            ToplamPuan = ToplamPuan / arizalar.Count();
            return($"{ToplamPuan}");
        }
Esempio n. 5
0
        protected List <SelectListItem> BostaOlanTeknisyenler()
        {
            List <SelectListItem> Teknisyenler = new List <SelectListItem>();
            //Tüm Teknisyenleri çekiyorm.
            var RoleTeknisyenler = NewRoleManager().FindByName("Teknisyen").Users.Select(x => x.UserId).ToList();

            //ariza tablosuna bir alan ekledim teknisyen durum çalışıyor,hasta,botagibi. üst tarafta bütün teknisyenleri çakiyorum. aşagıda bu teknisyenleri gezerek bir sorgu atıyorum herseferinde . eger bu teknisn ıdsındeki kişi arıza tablomda var Ve oldugu tabloda çalışıyor duumda ise bu teknisyen çalışıyordur diyip. geçiyorum . ama eger null geliyorsa bu teknisyen çalışmıyordur diyorum ve ekliyorum.


            for (int i = 0; i < RoleTeknisyenler.Count; i++)
            {
                var calisiyormu = new ArizaKayitRepo().GetAll().FirstOrDefault(x => x.TeknisyenId == RoleTeknisyenler[i] && x.TeknisyenDurumu == TeknisyenDurumu.Calısıyor);

                if (calisiyormu == null)
                {
                    var User = NewUserManager().FindById(RoleTeknisyenler[i]);


                    Teknisyenler.Add(new SelectListItem()
                    {
                        //TODO User alanına veya teknisyenlere özel olarak uzmanlık vs nasıl eklenebilir soralım hocaya eger olursa buarada combo boxta uzmanlık alanını getiririz. zaten İşi varmı yokmuyu nasıl ekliceksek aynı mantık olabilir.
                        Text  = User.Name + " " + User.Surname,
                        Value = User.Id
                    });
                }
            }

            return(Teknisyenler);
        }
        public ActionResult ArizaTakip()
        {
            //o an giriş yapan user'ın id'sini getirir.
            var musteriId = HttpContext.User.Identity.GetUserId();

            try
            {
                //arizalar tablosuna sistemde hangi müşteri giriş yapmıssa ona göre bir sorgu atılıyor. gelen sorguda olusturuldugu tarihe göre sıralanaıp sayfaya gönderiyoruz.
                var arizalar = new ArizaKayitRepo()
                               .GetAll(x => x.MusteriId == musteriId)
                               .OrderBy(x => x.ArizaOlusturmaTarihi)
                               .ToList();
                return(View(arizalar));
            }
            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu: {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Musteri",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
Esempio n. 7
0
        public ActionResult AnketPuanRapor()
        {
            var data             = new ArizaKayitRepo().GetAll().ToList();
            var RoleTeknisyenler = NewRoleManager().FindByName("Teknisyen").Users.Select(x => x.UserId).ToList();

            return(View(RoleTeknisyenler));
        }
Esempio n. 8
0
        // GET: Anket
        public ActionResult Index(string code)
        {
            var ariza = new ArizaKayitRepo().Queryable().FirstOrDefault(x => x.AnketCode == code);

            if (ariza == null)
            {
                TempData["Message"] = $"Böyle Bir Arıza Bulunamamıştır ";
                RedirectToAction("Index", "Home");
            }

            if (ariza.AnketYapildimi == true)
            {
                TempData["Message"] = $"Bu anket daha önceden doldurulmustur. ";
                RedirectToAction("Index", "Home");
            }

            //sistemdeki giriş yapmıs kişin idsını buluyorum.
            var MusteriId = HttpContext.User.Identity.GetUserId();

            //bulduugm Id  anket kodundaki buldugum id ile aynımı degilse gönderiyorum.
            if (ariza.MusteriId != MusteriId)
            {
                TempData["Message"] = $"Bu anket sizin arızanıza tanımlanmamıştır. ";
                RedirectToAction("Index", "Home");
            }



            return(View(ariza));
        }
Esempio n. 9
0
        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"));
            }
        }
        // GET: Teknisyen
        public ActionResult Index()
        {
            try
            {
                //Sistemdeki teknisyenId sini verir.
                var teknisyenId = HttpContext.User.Identity.GetUserId();
                //arızalar tablosuna sistemdeki teknisyen ıd  alındı ve sorgu atıldı . mapper ile view model e çevrilip sayfaya gönderildi
                var data = new ArizaKayitRepo()
                           .GetAll(x => x.TeknisyenId == teknisyenId).Select(x => Mapper.Map <ArizaViewModel>(x))
                           .ToList();

                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"));
            }
        }
        // GET: Operator
        public ActionResult Index()
        {
            var data = new ArizaKayitRepo()
                       .GetAll(x => x.OperatorKabul == false)
                       .Select(x => Mapper.Map <ArizaViewModel>(x))
                       .ToList();

            return(View(data));
        }
        public JsonResult Arizalar()
        {
            var model = new ArizaKayitRepo().GetAll().OrderBy(x => x.ArizaKayitZamani).Select(x => new ArizaKayitViewModel()
            {
                KullaniciId      = x.KullaniciId,
                Aciklama         = x.Aciklama,
                Konum            = x.Konum,
                ArizaKayitZamani = x.ArizaKayitZamani,
                KategoriId       = x.KategoriId,
                KategoriAdi      = x.Kategori.KategoriAdi,
                KullaniciAdi     = x.Kullanici.UserName
            }).ToList();

            return(Json(model, JsonRequestBehavior.AllowGet));
        }
Esempio n. 13
0
        public static string OrtalamaArizaCozumSuresi()
        {
            double ToplamGun       = 0.0;
            var    cozulenArizalar = new ArizaKayitRepo().GetAll(x => x.TeknisyenArizaDurum == TeknisyenArizaDurum.Çözüldü).ToList();

            foreach (var arizalar in cozulenArizalar)
            {
                TimeSpan Gun = arizalar.ArizaCozulduguTarih.Value -
                               arizalar.ArizaOlusturmaTarihi;
                ToplamGun += Gun.Seconds;
            }

            ToplamGun = ToplamGun / cozulenArizalar.Count();
            return($"{ToplamGun.ToString("##.000")}");
        }
Esempio n. 14
0
        public ActionResult Detaylar(ArizaViewModel model)
        {
            if (model == null)
            {
                return(RedirectToAction("Anasayfa"));
            }
            var ariza = new ArizaKayitRepo().GetById(model.ArizaId);

            if (ariza == null)
            {
                return(RedirectToAction("Anasayfa"));
            }
            ariza.TeknisyenID = model.TeknisyenID == 0 ? null : model.TeknisyenID;
            new ArizaKayitRepo().Update();
            return(View());
        }
        public ActionResult OPArizaDetay(int id)
        {
            try
            {
                ViewBag.TeknisyenK = BostaOlanTeknisyenler();
                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();

                return(View(data));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                throw;
            }
        }
Esempio n. 16
0
        public static string FitechTeknisyenDavranisPuanOrtalamasi()
        {
            var arizalar = new ArizaKayitRepo().GetAll(x => x.AnketYapildimi == true).ToList();

            if (arizalar.Count == 0)
            {
                return("Yapılan Anket Yok");
            }
            var ToplamPuan = 0.0;

            foreach (var ariza in arizalar)
            {
                ToplamPuan += (int)ariza.TeknisyenDavranisPuani;
            }

            ToplamPuan = ToplamPuan / arizalar.Count();
            return($"Teknisyenlerin Toplam Davranış Puanı Ortalaması : {ToplamPuan}");
        }
Esempio n. 17
0
        public static string FitechHizmetPuaniOrtalamasi()
        {
            var arizalar = new ArizaKayitRepo().GetAll(x => x.AnketYapildimi == true).ToList();

            if (arizalar.Count == 0)
            {
                return("Yapılan Anket Yok");
            }
            var ToplamPuan = 0.0;

            foreach (var ariza in arizalar)
            {
                ToplamPuan += (int)ariza.HizmetPuanı;
            }

            ToplamPuan = ToplamPuan / arizalar.Count();
            return($"Fitech Hizmet Puani Ortalaması : {ToplamPuan}");
        }
        public async Task <IHttpActionResult> Index()
        {
            List <OperatorIndexViewModel> data = new List <OperatorIndexViewModel>();

            try
            {
                var arizalist = new ArizaKayitRepo()
                                .GetAll(x => x.OperatorKabul == false)
                                //.Select(x => Mapper.Map<ArizaViewModel>(x))
                                .ToList();
                for (int i = 0; i < arizalist.Count(); i++)
                {
                    arizalist[i].ArızaPath = new FotografRepo().GetAll(z => z.ArizaId == arizalist[i].Id).Select(u => u.Yol).ToList();
                }
                //Suanda burada bir kulşlanıcı yokki tabi gelmez.
                var SistemdekiId = HttpContext.Current.User.Identity.GetUserId();
                for (int i = 0; i < arizalist.Count(); i++)
                {
                    data.Add(new OperatorIndexViewModel
                    {
                        FaturaResim         = arizalist[i].FaturaPath,
                        Adres               = arizalist[i].Adres,
                        ArizaCreatedDate    = arizalist[i].CreatedDate,
                        ArızaId             = arizalist[i].Id,
                        MusteriId           = arizalist[i].MusteriId,
                        ArızaResim          = arizalist[i].ArızaPath,
                        Sistemdekiteknisyen = SistemdekiId,
                        telno               = arizalist[i].Telno,
                    });
                }

                return(Ok(new ResponseData()
                {
                    success = true,
                    data = data,
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest($"Bir hata oluştu {ex.Message}"));
            }
        }
        public async Task <IHttpActionResult> ArizaDetay(int id)
        {
            try
            {
                var ariza = new ArizaKayitRepo().GetById(id);
                // Her list olayını için böylemi yapmalı
                var fotolar = new FotografRepo().GetAll(x => x.ArizaId == ariza.Id).Select(x => x.Yol).ToList();

                ariza.ArızaPath = fotolar;

                var data = new OperatorIndexViewModel
                {
                    ArızaResim       = ariza.ArızaPath,
                    Adres            = ariza.Adres,
                    ArızaId          = ariza.Id,
                    MusteriId        = ariza.MusteriId,
                    FaturaResim      = ariza.FaturaPath,
                    telno            = ariza.Telno,
                    ArizaCreatedDate = ariza.CreatedDate,
                };

                //arizadetaydata.ArızaPath = new FotografRepo().GetAll(z => z.ArizaId == id).Select(u => u.Yol).ToList();

                if (data != null)
                {
                    return(Ok(new ResponseData()
                    {
                        success = true,
                        data = data
                    }));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"Bir hata oluştu {ex.Message}"));
            }
        }
Esempio n. 20
0
        public List <SelectListItem> BostaOlanTeknisyenler(ArizaViewModel model)
        {
            List <SelectListItem> Teknisyenler = new List <SelectListItem>();
            //Tüm Teknisyenleri çekiyorm.
            var RoleTeknisyenler = NewRoleManager().FindByName("Teknisyen").Users.Select(x => x.UserId).ToList();



            //ariza tablosuna bir alan ekledim teknisyen durum çalışıyor,hasta,botagibi. üst tarafta bütün teknisyenleri çakiyorum. aşagıda bu teknisyenleri gezerek bir sorgu atıyorum herseferinde . eger bu teknisn ıdsındeki kişi arıza tablomda var Ve oldugu tabloda çalışıyor duumda ise bu teknisyen çalışıyordur diyip. geçiyorum . ama eger null geliyorsa bu teknisyen çalışmıyordur diyorum ve ekliyorum.


            for (int i = 0; i < RoleTeknisyenler.Count; i++)
            {
                var distance       = 0.0;
                var distanceString = 0.0;
                var technician     = NewUserManager().FindById(RoleTeknisyenler[i]);
                if (technician.Enlem.HasValue && technician.Boylam.HasValue && model.Enlem.HasValue && model.Boylam.HasValue)
                {
                    var failureCoordinate    = new GeoCoordinate(model.Enlem.Value, model.Boylam.Value);
                    var technicianCoordinate = new GeoCoordinate(technician.Enlem.Value, technician.Boylam.Value);

                    distance       = failureCoordinate.GetDistanceTo(technicianCoordinate);
                    distanceString = distance / 1000;
                }

                var calisiyormu = new ArizaKayitRepo().GetAll().FirstOrDefault(x => x.TeknisyenId == RoleTeknisyenler[i] && x.TeknisyenDurumu == TeknisyenDurumu.Calısıyor);

                if (calisiyormu == null)
                {
                    Teknisyenler.Add(new SelectListItem()
                    {
                        //TODO User alanına veya teknisyenlere özel olarak uzmanlık vs nasıl eklenebilir soralım hocaya eger olursa buarada combo boxta uzmanlık alanını getiririz. zaten İşi varmı yokmuyu nasıl ekliceksek aynı mantık olabilir.
                        Text  = technician.Name + " " + technician.Surname + " " + "Arızaya Olan Mesafe" + " " + distanceString.ToString("##.000") + "Km",
                        Value = technician.Id
                    });
                }
            }

            return(Teknisyenler);
        }
Esempio n. 21
0
        public ActionResult AnketKabul(ArızaKayıt model)
        {
            var ariza = new ArizaKayitRepo().GetById(model.Id);

            if (ariza != null)
            {
                ariza.FitechDavranisPuani      = model.FitechDavranisPuani;
                ariza.FitechHakkindakiGorusler = model.FitechHakkindakiGorusler;
                ariza.TeknisyenBilgiPuani      = model.TeknisyenBilgiPuani;
                ariza.TeknisyenDavranisPuani   = model.TeknisyenDavranisPuani;
                ariza.HizmetPuanı    = model.HizmetPuanı;
                ariza.AnketYapildimi = true;
                new ArizaKayitRepo().Update(ariza);
                TempData["Message"] = $"Katıldıgınız için Teşekkür ederiz.";
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                TempData["Message"] = $"Bir hata olustu.İyi günler";
                return(RedirectToAction("Index", "Home"));
            }
        }
Esempio n. 22
0
        public ActionResult OperatorArizaKayitlariGoruntuleme()
        {
            List <ArizaKayitViewModel> model = new List <ArizaKayitViewModel>();
            var arizakayitlarim = new ArizaKayitRepo().GetAll().Where(x => x.ArizaGiderildiMi == false);

            foreach (var item in arizakayitlarim)
            {
                ArizaKayitViewModel yenikayit = new ArizaKayitViewModel()
                {
                    Aciklama           = item.Aciklama,
                    ArizaGiderildiMi   = item.ArizaGiderildiMi,
                    ArizaKayitZamani   = item.ArizaKayitZamani,
                    FotografYolu       = item.FotografYolu,
                    Konum              = item.Konum,
                    KullaniciId        = item.KullaniciId,
                    ArizaKayitNumarasi = item.Id
                };
                model.Add(yenikayit);
            }

            return(View(model));
        }
        public ActionResult ArizaKayitlariGoruntuleme()
        {
            List <ArizaKayitViewModel> model = new List <ArizaKayitViewModel>();
            var arizakayitlarim = new ArizaKayitRepo().GetById(HttpContext.User.Identity.GetUserId());

            foreach (var item in arizakayitlarim)
            {
                ArizaKayitViewModel yenikayit = new ArizaKayitViewModel()
                {
                    Aciklama           = item.Aciklama,
                    ArizaGiderildiMi   = item.ArizaGiderildiMi,
                    ArizaKayitZamani   = item.ArizaKayitZamani,
                    FotografYolu       = item.FotografYolu,
                    Konum              = item.Konum,
                    KullaniciId        = item.KullaniciId,
                    ArizaKayitNumarasi = item.Id
                };
                model.Add(yenikayit);
            }

            return(View(model));
        }
Esempio n. 24
0
 public ActionResult ArizaDetayList()
 {
     try
     {
         var data = new ArizaKayitRepo()
                    .GetAll()
                    .Select(x => Mapper.Map <ArizaViewModel>(x))
                    .OrderBy(x => x.ArizaOlusturmaTarihi)
                    .ToList();
         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 async Task <ActionResult> ArizaDetay(int id)
        {
            try
            {
                var x = new ArizaKayitRepo().GetById(id);

                var data = Mapper.Map <ArizaViewModel>(x);
                data.ArızaPath = new FotografRepo().GetAll(z => z.ArizaId == id).Select(u => u.Yol).ToList();

                return(View(data));
            }
            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Admin",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
        public IHttpActionResult ArizaList()
        {
            //operator bulunuyor ve o operatorun aldıgı kayıtlar listelenip çekiliyor.

            var OpertatorId = HttpContext.Current.User.Identity.GetUserId();

            try
            {
                var data = new ArizaKayitRepo()
                           .GetAll(x => x.OperatorId == OpertatorId)
                           .Select(x => Mapper.Map <ArizaViewModel>(x))
                           .OrderBy(x => x.ArizaOlusturmaTarihi)
                           .ToList();
                return(Ok(new ResponseData()
                {
                    success = true,
                    data = data,
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest($"Bir hata olustu{ex.Message}"));
            }
        }
        //TODO TEknisyen atamayı burada yap
        public async Task <ActionResult> 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;
                new ArizaKayitRepo().Update(ariza);

                var opId         = HttpContext.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
                };
                new ArizaLogRepo().Insert(OperatorLog);

                string SiteUrl = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host +
                                 (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.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

                TempData["Message"] = $"{ariza.Id} nolu arızaya {teknisyen.Name}  {teknisyen.Surname} atanmıştır.İyi çalışmalar.";

                return(RedirectToAction("Index", "Operator"));
            }

            catch (Exception ex)
            {
                TempData["Model"] = new ErrorViewModel()
                {
                    Text           = $"Bir hata oluştu {ex.Message}",
                    ActionName     = "Index",
                    ControllerName = "Admin",
                    ErrorCode      = 500
                };
                return(RedirectToAction("Error", "Home"));
            }
        }
        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}"));
            }
        }
        //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> OPArizaDetay(int id)
        {
            try
            {
                var ariza   = new ArizaKayitRepo().GetById(id);
                var fotolar = new FotografRepo().GetAll(x => x.ArizaId == ariza.Id).Select(x => x.Yol).ToList();
                ariza.ArızaPath = fotolar;
                var data = new OperatorIndexViewModel
                {
                    ArızaResim       = ariza.ArızaPath,
                    Adres            = ariza.Adres,
                    ArızaId          = ariza.Id,
                    MusteriId        = ariza.MusteriId,
                    FaturaResim      = ariza.FaturaPath,
                    telno            = ariza.Telno,
                    ArizaCreatedDate = ariza.CreatedDate,
                };


                List <BosTeknisyenViewModel> TeknisyenList = new List <BosTeknisyenViewModel>();
                var RoleTeknisyenler = NewRoleManager().FindByName("Teknisyen").Users.Select(x => x.UserId).ToList();

                for (int i = 0; i < RoleTeknisyenler.Count; i++)
                {
                    //var distance = 0.0;
                    var distanceString = 0.0;
                    var technician     = NewUserManager().FindById(RoleTeknisyenler[i]);
                    //if (technician.Enlem.HasValue && technician.Boylam.HasValue && model.Enlem.HasValue && model.Boylam.HasValue)
                    //{
                    //    var failureCoordinate = new GeoCoordinate(model.Enlem.Value, model.Boylam.Value);
                    //    var technicianCoordinate = new GeoCoordinate(technician.Enlem.Value, technician.Boylam.Value);

                    //    distance = failureCoordinate.GetDistanceTo(technicianCoordinate);
                    //    distanceString = distance / 1000;


                    //}

                    var calisiyormu = new ArizaKayitRepo().GetAll().FirstOrDefault(x =>
                                                                                   x.TeknisyenId == RoleTeknisyenler[i] && x.TeknisyenDurumu == TeknisyenDurumu.Calısıyor);

                    if (calisiyormu == null)
                    {
                        TeknisyenList.Add(new BosTeknisyenViewModel()
                        {
                            Text = technician.Name + " " + technician.Surname + " " + "Arızaya Olan Mesafe" + " " +
                                   distanceString.ToString("##.000") + "Km",
                            Value = technician.Id
                        });
                    }
                }

                return(Ok(new ResponseData()
                {
                    data = data,
                    success = true,
                    Teknisyenler = TeknisyenList
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest($"Bir hata olustu{ex.Message}"));
            }
        }