Esempio n. 1
0
        public string Save()
        {
            string result = "true";

            try
            {
                var safeCitationID = this.SafeCitationID;
                using (var context = new SafeEntities())
                {
                    Safe_Citations safeCitation;
                    if (this.SafeCitationID == 0)
                    {
                        safeCitation = new Safe_Citations();
                    }
                    else
                    {
                        safeCitation = (from c in context.Safe_Citations
                                        where c.SafeCitationID == safeCitationID
                                        select c).Single();
                    }

                    PropertyInfo[] props = safeCitation.GetType().GetProperties();

                    foreach (PropertyInfo prop in props)
                    {
                        if (prop.GetGetMethod().IsVirtual)
                        {
                            //if (prop.PropertyType.Name.Contains("ICollection"))
                            //{
                            //  // get static save method
                            //  MethodInfo saveMethod = prop.GetType().GetMethod("Save", BindingFlags.Static | BindingFlags.Public);
                            //  // call save method and pass it the collection
                            //  saveMethod.Invoke(null, new object[] {(object) prop.GetValue(this, null)});
                            //}
                            //else
                            //{
                            //  continue;
                            //}
                            continue;
                        }

                        var val = this.GetType().GetProperty(prop.Name).GetValue(this, null);
                        prop.SetValue(safeCitation, val, null);
                    }

                    if (SafeCitationID == 0)
                    {
                        context.Safe_Citations.Add(safeCitation);
                    }

                    try
                    {
                        var saveFlag = true;

                        #region Validate
                        string errorMessage = string.Empty;

                        var validationErrors = context.GetValidationErrors()
                                               .Where(vr => !vr.IsValid)
                                               .SelectMany(vr => vr.ValidationErrors).ToList();

                        // Check for duplicate citation number.
                        if (SafeCitationID == 0)
                        {
                            var citationNumberAlreadyExists = (from c in context.Safe_Citations
                                                               where c.CitationNumber == safeCitation.CitationNumber
                                                               select c).Any();

                            if (citationNumberAlreadyExists)
                            {
                                validationErrors.Add(new DbValidationError("CitationNumber", "You entered a duplicate citation number. Either modify the citation number or edit the existing citation."));
                            }
                        }

                        if (Safe_CitationViolations.Count() < 1)
                        {
                            validationErrors.Add(new DbValidationError("Safe_CitationViolations", "At least one violation is required."));
                        }

                        if (Safe_CitationPoliceOfficers.Count() < 1 && safeCitation.Superintendent == "")
                        {
                            validationErrors.Add(new DbValidationError("Safe_CitationPoliceOfficers", "At least one officer or a superintendent is required."));
                        }

                        foreach (var error in validationErrors)
                        {
                            saveFlag      = false;
                            errorMessage += error.ErrorMessage + "</br>";
                        }
                        #endregion

                        // Save Collections
                        if (saveFlag)
                        {
                            context.SaveChanges();

                            if (this.WhenDue != null)
                            {
                                foreach (Safe_CitationViolations violation in Safe_CitationViolations)
                                {
                                    if (violation.Safe_ViolationTypes.ViolationTypeDescription == "Equipment")
                                    {
                                        violation.ViolationPoints = 0;
                                        violation.Safe_Violations.ViolationPoints = 0;
                                    }
                                }
                            }

                            SAFE.Safe_CitationViolations.Save(Safe_CitationViolations, safeCitation.SafeCitationID);

                            SAFE.Safe_CitationPoliceOfficers.Save(Safe_CitationPoliceOfficers, safeCitation.SafeCitationID);
                            SAFE.Documents.Save(this.Documents, safeCitation.SafeCitationID);
                            SAFE.Safe_Hearings.Save(Safe_Hearings, safeCitation.SafeCitationID);
                            context.SaveChanges();

                            if (this.SafeCitationID == 0)
                            {
                                this.SafeCitationID = safeCitation.SafeCitationID;
                            }

                            return("true");
                        }
                        else
                        {
                            return(errorMessage);
                        }
                    }
                    catch (Exception ex)
                    {
                        result = ((ex.InnerException).InnerException).Message;
                    }
                }
            }
            catch (Exception ex)
            {
                result = "ERROR:\n\r\n\r" + ex.Message + " INNER EXCEPTION: " + ((ex.InnerException).InnerException).Message;
            }

            return(result);
        }
        public static bool Save(ICollection <Safe_CitationPoliceOfficers> citationPoliceOfficers, int safeCitationID)
        {
            bool result = false;

            try
            {
                using (var context = new SafeEntities())
                {
                    #region Get SafeCitationID

                    var tmp = from c in citationPoliceOfficers
                              select c;

                    var citationId = safeCitationID;

                    #endregion

                    #region Get List of items to delete

                    var ids = from id in citationPoliceOfficers
                              select new { id.OfficerBadgeID };

                    var idList = ids.Select(item => item.OfficerBadgeID).ToList();

                    var deleteList = from d in context.Safe_CitationPoliceOfficers
                                     where d.SafeCitationID == citationId &&
                                     !idList.Contains(d.OfficerBadgeID)
                                     select d;
                    #endregion

                    #region Remove deleted items

                    foreach (var item in deleteList)
                    {
                        context.Safe_CitationPoliceOfficers.Remove(item);
                    }

                    #endregion

                    #region Update changes

                    var updateList = from d in context.Safe_CitationPoliceOfficers
                                     where d.SafeCitationID == citationId &&
                                     idList.Contains(d.OfficerBadgeID)
                                     select d;

                    foreach (var item in updateList)
                    {
                        var theItem = item;

                        // find matching record from param
                        var records = from record in citationPoliceOfficers
                                      where record.OfficerBadgeID == theItem.OfficerBadgeID
                                      select record;

                        Safe_CitationPoliceOfficers sourceRecord = records.FirstOrDefault();

                        PropertyInfo[] props = theItem.GetType().GetProperties();
                        Array.ForEach(props, prop =>
                        {
                            if (!prop.GetGetMethod().IsVirtual&& prop.Name != "C_DataChanges_RowID")
                            {
                                var value = prop.GetValue(sourceRecord, null);
                                prop.SetValue(theItem, value, null);
                            }
                        });

                        theItem.SafeCitationID = citationId;
                    }

                    #endregion

                    #region Add new items

                    var adds = from d in context.Safe_CitationPoliceOfficers
                               where d.SafeCitationID == citationId
                               select d;

                    var addIds = adds.Select(item => item.OfficerBadgeID).ToList();

                    var addRecords = from addRecord in citationPoliceOfficers
                                     where !addIds.Contains(addRecord.OfficerBadgeID)
                                     select addRecord;

                    foreach (var item in addRecords)
                    {
                        var theItem   = item;
                        var newRecord = new Safe_CitationPoliceOfficers();

                        PropertyInfo[] props = theItem.GetType().GetProperties();
                        Array.ForEach(props, prop =>
                        {
                            if (!prop.GetGetMethod().IsVirtual)
                            {
                                var value = prop.GetValue(theItem, null);
                                prop.SetValue(newRecord, value, null);
                            }
                        });
                        newRecord.SafeCitationID = citationId;
                        context.Safe_CitationPoliceOfficers.Add(newRecord);
                    }

                    #endregion

                    try
                    {
                        context.SaveChanges();
                    }
                    catch (DbEntityValidationException dbEx)
                    {
                        foreach (var validationErrors in dbEx.EntityValidationErrors)
                        {
                            foreach (var validationError in validationErrors.ValidationErrors)
                            {
                                string message = string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                                Trace.TraceInformation(message);
                            }
                        }
                    }
                }

                result = true;
            }
            catch (Exception ex)
            {
                Exception theException = ex;
                while (theException.InnerException != null)
                {
                    theException = theException.InnerException;
                }
                throw theException;
            }

            return(result);
        }