private void CheckPostalCodePostageCharges()
        {
            var eventDetail = db.SystemEvents.Find(Generic.SystemEventCheckPostal);
            if (eventDetail != null && eventDetail.UserId.HasValue)
            {
                var codes = db.PostalCodes.Where(m=>m.Active).ToArray();
                foreach (var code in codes)
                {
                    var charge = (from item in db.PostalCodePostageCharges
                                  where item.PostalCodeId == code.PostalCodeId
                                  select item).FirstOrDefault();
                    if (charge == null)
                    {
                        var msg = string.Format("Postal code {0} does not have a postage charge set up", code.PostalCodeName);

                        //create a note
                        var note = (from item in db.SystemNotes
                                    where item.NoteText == msg
                                    select item).FirstOrDefault();

                        if (note == null)
                        {
                            int clientId = 0;
                            var clientIds = (from item in db.Addresses
                                            where item.Code == code.PostalCodeName
                                            select item.ClientID).ToArray();

                            if (clientIds.Length > 0) clientId = clientIds.Max();

                            if (clientId > 0)
                            {
                                note = new SystemNote()
                                {
                                    UserID = eventDetail.UserId.Value,
                                    Created = DateTime.Now,
                                    NoteId = Guid.NewGuid(),
                                    NoteText = msg
                                };
                                db.SystemNotes.Add(note);
                                db.SaveChanges();


                                SystemTicketTemplatesController.PersistTicket(db, Generic.SystemEventCheckPostal,
                                    note.NoteId,
                                    clientId,
                                    Generic.SupportTicketTypeIdSystem,
                                    msg,
                                    eventDetail.UserId.Value);
                            }
                        }
                    }
                }
            }
        }
        private void CheckPostalCodes()
        {

            var eventDetail = db.SystemEvents.Find(Generic.SystemEventCheckPostal);
            if (eventDetail != null && eventDetail.UserId.HasValue)
            {
                var clientPostalCodes = (from item in db.Addresses
                                         where item.AddressTypeID == 2
                                         && item.ClientID>0
                                         select item).ToArray();
                var clientPostalCodeGrouped = (from item in clientPostalCodes
                                               group item by item.Code into grp
                                               select grp).ToArray();


                foreach (var grouped in clientPostalCodeGrouped)
                {
                    var code = (from item in db.PostalCodes
                                where item.PostalCodeName == grouped.Key
                                select item).FirstOrDefault();
                    if (code == null)
                    {

                        var msg = string.Format("Postal code \"{0}\" does not exist but is used by {1} client(s) as a shipping address code. First client: {2}", grouped.Key, grouped.Count(), grouped.First().ClientID);

                        //create a note
                        var note = (from item in db.SystemNotes
                                    where item.NoteText == msg
                                    select item).FirstOrDefault();

                        if (note == null)
                        {
                            note = new SystemNote()
                            {
                                UserID = eventDetail.UserId.Value,
                                Created = DateTime.Now,
                                NoteId = Guid.NewGuid(),
                                NoteText = msg
                            };
                            db.SystemNotes.Add(note);
                            db.SaveChanges();

                            SystemTicketTemplatesController.PersistTicket(db, Generic.SystemEventCheckPostal,
                                note.NoteId,
                                grouped.First().ClientID,
                                Generic.SupportTicketTypeIdSystem,
                                msg,
                                eventDetail.UserId.Value);

                        }
                    }
                }
            }
        }