public static OsobaEvent CreateOrUpdate(OsobaEvent osobaEvent, string user) { using (Lib.Data.DbEntities db = new Data.DbEntities()) { // create if (osobaEvent.pk == 0 && osobaEvent.OsobaId > 0) { osobaEvent.Organizace = ParseTools.NormalizaceStranaShortName(osobaEvent.Organizace); osobaEvent.Created = DateTime.Now; // check if event exists so we are not creating duplicities... var oe = db.OsobaEvent .Where(ev => ev.OsobaId == osobaEvent.OsobaId && ev.AddInfo == osobaEvent.AddInfo && ev.DatumOd == osobaEvent.DatumOd && ev.Type == osobaEvent.Type && ev.Organizace == osobaEvent.Organizace) .FirstOrDefault(); if (oe != null) { return(oe); } db.OsobaEvent.Add(osobaEvent); db.SaveChanges(); Osoby.GetById.Get(osobaEvent.OsobaId).FlushCache(); Audit.Add(Audit.Operations.Update, user, osobaEvent, null); return(osobaEvent); } // update if (osobaEvent.pk > 0) { var eventToUpdate = db.OsobaEvent .Where(ev => ev.pk == osobaEvent.pk ).FirstOrDefault(); var eventOriginal = eventToUpdate.ShallowCopy(); if (eventToUpdate != null) { eventToUpdate.DatumOd = osobaEvent.DatumOd; eventToUpdate.DatumDo = osobaEvent.DatumDo; eventToUpdate.Organizace = ParseTools.NormalizaceStranaShortName(osobaEvent.Organizace); eventToUpdate.AddInfoNum = osobaEvent.AddInfoNum; eventToUpdate.AddInfo = osobaEvent.AddInfo; eventToUpdate.Title = osobaEvent.Title; eventToUpdate.Type = osobaEvent.Type; eventToUpdate.Zdroj = osobaEvent.Zdroj; eventToUpdate.Status = osobaEvent.Status; eventToUpdate.Ico = osobaEvent.Ico; eventToUpdate.CEO = osobaEvent.CEO; eventToUpdate.Created = DateTime.Now; db.SaveChanges(); Osoby.GetById.Get(osobaEvent.OsobaId).FlushCache(); Audit.Add(Audit.Operations.Update, user, eventToUpdate, eventOriginal); return(eventToUpdate); } } } return(osobaEvent); }
public OsobaEvent AddOrUpdateEvent(OsobaEvent ev, string user, bool rewrite = false, bool checkDuplicates = true) { if (ev == null) { return(null); } //if (ev.Type == (int)OsobaEvent.Types.Sponzor) //{ // return AddSponsoring(ev.AddInfo, ev.DatumOd.Value.Year, ev.AddInfoNum.Value, ev.Zdroj, user); //} //check duplicates using (DbEntities db = new Data.DbEntities()) { OsobaEvent exists = null; if (ev.pk > 0) { exists = db.OsobaEvent .AsNoTracking() .FirstOrDefault(m => m.pk == ev.pk ); } else if (checkDuplicates) { exists = db.OsobaEvent .AsNoTracking() .FirstOrDefault(m => m.OsobaId == this.InternalId && m.Type == ev.Type && m.AddInfo == ev.AddInfo && m.AddInfoNum == ev.AddInfoNum && m.DatumOd == ev.DatumOd && m.DatumDo == ev.DatumDo && m.Zdroj == ev.Zdroj ); if (exists != null) { ev.pk = exists.pk; } } if (exists != null && rewrite) { db.OsobaEvent.Remove(exists); Audit.Add <OsobaEvent>(Audit.Operations.Delete, user, exists, null); db.SaveChanges(); exists = null; } if (exists == null) { ev.OsobaId = this.InternalId; db.OsobaEvent.Add(ev); Audit.Add(Audit.Operations.Create, user, ev, null); db.SaveChanges(); return(ev); } else { ev.OsobaId = this.InternalId; ev.pk = exists.pk; db.OsobaEvent.Attach(ev); db.Entry(ev).State = System.Data.Entity.EntityState.Modified; Audit.Add(Audit.Operations.Create, user, ev, exists); db.SaveChanges(); return(ev); } } }