private StateResponse _putStart(dialogTimeEntities db, string persId, StartStop entry, PutStateInfoEx data, bool manuell = false)
 {
     if (entry != null && (entry.TimeIntervall.EndsWith("-") || entry.TimeIntervall.EndsWith("p")))
     {
         return(new StateResponse()
         {
             Success = false,
             Error = "Kann man nicht starten wenn nicht gestoppt. Bitte melden!"
         });
     }
     else
     {
         var x = new StartStop()
         {
             Datum = data.Datum.Date,
             LohnkategorieKuerzel = data.LohnKategorie,
             PersId           = persId,
             ProjektId        = Guid.Parse(data.Projekt),
             TarifkategorieId = data.TarifKategorie,
             Text             = data.Text,
             TimeIntervall    = string.Format("{0:00}:{1:00}-", data.Datum.Hour, data.Datum.Minute),
             StartStopManuell = manuell
         };
         db.StartStops.Add(x);
         db.SaveChanges();
         return(new Models.StateResponse()
         {
             Success = true,
             TimeIntervall = x.TimeIntervall,
             Error = null
         });
     }
 }
        public List <StartStopEntry> GetHistory(string name, int max = 5)
        {
            var list = new List <StartStopEntry>();
            var db   = new dialogTimeEntities();

            using (db)
            {
                var q = from x in db.StartStops
                        where x.PersId == name && x.Datum != null
                        orderby x.Datum descending
                        select new StartStopEntry()
                {
                    Datum          = x.Datum.Value,
                    Lohnkategorie  = x.Lohnkategorie.Beschreibung,
                    Projekt        = x.Projekt.Bezeichnung,
                    Tarifkategorie = x.Tarifkategorie.Bezeichnung,
                    Text           = x.Text,
                    TimeIntervall  = x.TimeIntervall
                };
                if (q.Any())
                {
                    list = q.Take(max).ToList();
                }
                return(list);
            }
        }
        public string GetDbConStr()
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                var str = db.Database.Connection.ConnectionString;
                return(str);
            }
        }
        public IEnumerable <SelectItem> GetTarifkategorien()
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                var q = from x in db.Tarifkategorien.AsNoTracking()
                        orderby x.Bezeichnung
                        select new SelectItem()
                {
                    Value = x.Id, Text = x.Bezeichnung
                };
                return(q.ToList());
            }
        }
        public string GetDbTest()
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                try
                {
                    return(db.Personal.First().PersId);
                }
                catch (Exception ex)
                {
                    return(ex.Message);
                }
            }
        }
        public bool GetLogin(string name, string password)
        {
            var md5 = MD5(password);
            var db  = new dialogTimeEntities();

            using (db)
            {
                var q = from x in db.Personal
                        where x.PersId == name && x.Passwort == md5
                        select x;
                if (q.Any())
                {
                    return(true);
                }
                return(false);
            }
        }
        public IEnumerable <SelectItem> GetProjekte(string name)
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                var mitarbeiter = db.Personal.Find(name);
                var q           = from x in mitarbeiter.MitarbeiterProjekte //.AsNoTracking()
                                  where x.Aktiv != null && x.Aktiv.Value
                                  orderby x.Bezeichnung
                                  select new SelectItem()
                {
                    Value = x.Id.ToString(), Text = x.Bezeichnung
                };
                return(q.ToList());
            }
        }
        public IEnumerable <SelectItem> GetLohnkategorien(string projektId)
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                var id      = Guid.Parse(projektId);
                var projekt = db.Projekte.Find(id);
                var q       = from x in projekt.ProjektLohnkategorieZuordnung //.AsNoTracking()
                              orderby x.Lohnkategorien.Beschreibung
                              select new SelectItem()
                {
                    Value = x.Lohnkategorien.Kuerzel,
                    Text  = x.Lohnkategorien.Beschreibung
                };
                return(q.ToList());
            }
        }
        public StateResponse PutStateEx(string name, [FromBody] PutStateInfoEx data)
        {
            StartStop entry = null;
            var       db    = new dialogTimeEntities();

            using (db)
            {
                try
                {
                    var q = from x in db.StartStops
                            where x.PersId == name
                            orderby x.Id descending
                            select x;
                    if (q.Any())
                    {
                        entry = q.First();
                    }
                    // ---------------------------------------------
                    switch (data.Action)
                    {
                    case "start":
                        return(_putStart(db, name, entry, data, true));

                    case "stop":
                        return(_putStop(db, name, entry, data.Datum, true));

                    default:
                        return(new Models.StateResponse()
                        {
                            Success = false,
                            Error = "Keine Aktion vorhanden. Bitte melden!"
                        });
                    }
                }
                catch (Exception ex)
                {
                    return(new Models.StateResponse()
                    {
                        Success = false,
                        Error = ex.Message
                    });
                }
            }
        }
 private StateResponse _putCancel(dialogTimeEntities db, string persId, StartStop entry)
 {
     if (entry == null)
     {
         return(new Models.StateResponse()
         {
             Success = false,
             Error = "Kann man nicht stornieren wenn nicht gestarted. Bitte melden!"
         });
     }
     db.StartStops.Remove(entry);
     db.SaveChanges();
     return(new Models.StateResponse()
     {
         Success = true,
         TimeIntervall = string.Empty,
         Error = null
     });
 }
        public StartStopState GetState(string name)
        {
            var db = new dialogTimeEntities();

            using (db)
            {
                var q = from x in db.StartStops.AsNoTracking()
                        where x.PersId == name
                        orderby x.Id descending
                        select x;
                if (q.Any())
                {
                    var first = q.First();
                    var last  = new StartStopState()
                    {
                        State          = first.TimeIntervall.EndsWith("-") ? "started" : (first.TimeIntervall.EndsWith("p") ? "paused" : "stopped"),
                        Datum          = first.Datum.Value.ToShortDateString(),
                        Projekt        = first.ProjektId.ToString(),
                        LohnKategorie  = first.LohnkategorieKuerzel,
                        TarifKategorie = first.TarifkategorieId,
                        TimeIntervall  = first.TimeIntervall,
                        Text           = first.Text
                    };
                    return(last);
                }
                else
                {
                    var last = new StartStopState()
                    {
                        State          = "stopped",
                        Datum          = null,
                        Projekt        = null,
                        LohnKategorie  = null,
                        TarifKategorie = null,
                        TimeIntervall  = "",
                        Text           = ""
                    };
                    return(last);
                }
            }
        }
        private StateResponse _putStop(dialogTimeEntities db, string persId, StartStop entry, DateTime datum, bool manuell = false)
        {
            if (entry == null)
            {
                return(new Models.StateResponse()
                {
                    Success = false,
                    Error = "Kann man nicht stoppen wenn nicht gestarted. Bitte melden!"
                });
            }
            var timeIntervall = entry.TimeIntervall;

            if (timeIntervall.EndsWith("-") || timeIntervall.EndsWith("p"))
            {
                if (timeIntervall.EndsWith("-"))
                {
                    entry.TimeIntervall = timeIntervall + string.Format("{0:00}:{1:00}", datum.Hour, datum.Minute);
                }
                else
                {
                    entry.TimeIntervall = timeIntervall.Substring(0, timeIntervall.Length - 1);
                }
                if (manuell)
                {
                    entry.StartStopManuell = manuell;
                }
                var ii = new Intervalls(entry.TimeIntervall);
                var jj = new Intervalls();
                var q2 = from x in db.RapportEintraege
                         where x.PersId == persId && x.Datum == datum.Date
                         select x;
                foreach (var e in q2)
                {
                    jj.AddRange(new Intervalls(e.TimeIntervall));
                }
                ii.CutWith(jj);
                var eintrag = new RapportEintrag()
                {
                    Id                   = Guid.NewGuid(),
                    AnsatzExtern         = 0,
                    AnsatzIntern         = 0,
                    ArbeitsRapportNr     = 0,
                    Aufwand              = Math.Round(ii.EllapsedAsDouble, 1),
                    Datum                = datum.Date,
                    ErfDatum             = DateTime.Now,
                    ErfName              = persId,
                    LohnkategorieKuerzel = entry.LohnkategorieKuerzel,
                    LohnKatKontierung    = "",
                    MandantId            = Guid.Parse("331A58AF-C3F6-42BE-BF55-0AE0C5F26C87"),
                    MutDatum             = DateTime.Now,
                    MutName              = persId,
                    PersId               = persId,
                    ProjektId            = entry.ProjektId,
                    TarifkategorieId     = entry.TarifkategorieId,
                    Text                 = entry.Text,
                    TimeIntervall        = ii.ToString(),
                    Verrechnet           = 0,
                    Zuschlag             = 0,
                    StartStopManuell     = entry.StartStopManuell
                };
                db.RapportEintraege.Add(eintrag);
                db.SaveChanges();
                return(new Models.StateResponse()
                {
                    Success = true,
                    TimeIntervall = eintrag.TimeIntervall,
                    Error = null
                });
            }
            else
            {
                return(new Models.StateResponse()
                {
                    Success = false,
                    Error = "Kann man nicht stoppen wenn nicht gestarted. Bitte melden!"
                });
            }
        }
        public StateResponse PutState(string name, [FromBody] PutStateInfo data)
        {
            // Ejemplo
            // api/StartStop/State/Fritz
            //    { Action="start", Projekt="", LohnKategorie="", TarifKategorie="", Text="" }
            //    { Action="stop" }
            //    { Action="pause" }
            //    { Action="resume" }
            StartStop entry = null;
            var       db    = new dialogTimeEntities();

            using (db)
            {
                try
                {
                    var q = from x in db.StartStops
                            where x.PersId == name
                            orderby x.Id descending
                            select x;
                    if (q.Any())
                    {
                        entry = q.First();
                    }
                    // ---------------------------------------------
                    switch (data.Action)
                    {
                    case "start":
                        return(_putStart(db, name, entry, new PutStateInfoEx()
                        {
                            Action = "start",
                            Datum = DateTime.Now,
                            LohnKategorie = data.LohnKategorie,
                            Projekt = data.Projekt,
                            TarifKategorie = data.TarifKategorie,
                            Text = data.Text
                        }));

                    case "pause":
                    {
                        if (entry == null)
                        {
                            return(new Models.StateResponse()
                                {
                                    Success = false,
                                    Error = "Kann man nicht pausen wenn nicht gestartet. Bitte melden!"
                                });
                        }
                        var timeIntervall = entry.TimeIntervall;
                        if (timeIntervall.EndsWith("-"))
                        {
                            entry.TimeIntervall = timeIntervall + string.Format("{0:00}:{1:00}p", DateTime.Now.Hour, DateTime.Now.Minute);
                            db.SaveChanges();
                            return(new StateResponse()
                                {
                                    Success = true,
                                    Error = null,
                                    TimeIntervall = entry.TimeIntervall
                                });
                        }
                        else
                        {
                            return(new Models.StateResponse()
                                {
                                    Success = false,
                                    Error = "Kann man nicht pausen wenn nicht gestartet. Bitte melden!"
                                });
                        }
                    }

                    case "resume":
                    {
                        if (entry == null)
                        {
                            return(new Models.StateResponse()
                                {
                                    Success = false,
                                    Error = "Kann man nicht resumen wenn nicht gepaused. Bitte melden!"
                                });
                        }
                        var timeIntervall = entry.TimeIntervall;
                        if (timeIntervall.EndsWith("p"))
                        {
                            entry.TimeIntervall = timeIntervall.Substring(0, timeIntervall.Length - 1) +
                                                  string.Format(",{0:00}:{1:00}-", DateTime.Now.Hour, DateTime.Now.Minute);
                            db.SaveChanges();
                            return(new Models.StateResponse()
                                {
                                    Success = true,
                                    TimeIntervall = entry.TimeIntervall,
                                    Error = null
                                });
                        }
                        else
                        {
                            return(new Models.StateResponse()
                                {
                                    Success = false,
                                    Error = "Kann man nicht resumen wenn nicht gepaused. Bitte melden!"
                                });
                        }
                    }

                    case "stop":
                        return(_putStop(db, name, entry, DateTime.Now));

                    case "cancel":
                        return(_putCancel(db, name, entry));

                    default:
                        return(new Models.StateResponse()
                        {
                            Success = false,
                            Error = "Keine Aktion vorhanden. Bitte melden!"
                        });
                    }
                }
                catch (Exception ex)
                {
                    return(new Models.StateResponse()
                    {
                        Success = false,
                        Error = ex.Message
                    });
                }
            }
        }