public IssueItem GetIssueItemByResidentID(int residentID)
        {
            var resident = db.Residents.Find(residentID);

            if (resident == null)
            {
                throw new NullReferenceException(String.Format("There is no record in the 'Resident' table with given {0} ID", residentID));
            }

            IssueItem item = new IssueItem
            {
                IssueID             = 0,
                ResidentID          = resident.ResidentID,
                FirstName           = resident.FirstName,
                LastName            = resident.LastName,
                MiddleName          = resident.MiddleName,
                IdentificatorNumber = resident.IdentificatorNumber,
                BirthDate           = resident.BirthDate,
                IssueName           = String.Empty,
                IssueDescription    = String.Empty,
                IssueDate           = null,
                IssueTypeID         = null,
                IssueCategoryID     = 1,
                CompanyID           = null,
                CompanyName         = null
            };

            item.InitializationType = InitializationTypes.Insert;

            return(item);
        }
        public IssueItem GetIssueItemByCompanyID(int companyID)
        {
            var company = db.Companys.Find(companyID);

            if (company == null)
            {
                throw new NullReferenceException(String.Format("There is no record in the 'Company' table with given {0} ID", companyID));
            }

            IssueItem item = new IssueItem
            {
                IssueID          = 0,
                ResidentID       = null,
                IssueName        = String.Empty,
                IssueDescription = String.Empty,
                IssueDate        = null,
                IssueTypeID      = null,

                IssueCategoryID = 2,
                CompanyID       = company.CompanyID,
                CompanyName     = company.CompanyName
            };

            item.InitializationType = InitializationTypes.Insert;

            return(item);
        }
        public IssueItem SaveIssue(IssueItem issueItem)
        {
            Issue issue = null;

            switch (issueItem.InitializationType)
            {
            case InitializationTypes.Insert:
                issue = new Issue
                {
                    IssueID          = 0,
                    ResidentID       = issueItem.ResidentID,
                    IssueName        = issueItem.IssueName,
                    IssueDescription = issueItem.IssueDescription,
                    IssueDate        = issueItem.IssueDate,
                    IssueTypeID      = issueItem.IssueTypeID,

                    IssueCategoryID = issueItem.IssueCategoryID,
                    CompanyID       = issueItem.CompanyID
                };
                db.Issues.Add(issue);
                break;

            case InitializationTypes.Update:
                issue = new Issue
                {
                    IssueID          = issueItem.IssueID,
                    ResidentID       = issueItem.ResidentID,
                    IssueName        = issueItem.IssueName,
                    IssueDescription = issueItem.IssueDescription,
                    IssueDate        = issueItem.IssueDate,
                    IssueTypeID      = issueItem.IssueTypeID,

                    IssueCategoryID = issueItem.IssueCategoryID,
                    CompanyID       = issueItem.CompanyID
                };
                db.Issues.Attach(issue);
                db.Entry(issue).State = EntityState.Modified;
                break;
            }
            db.SaveChanges();
            issueItem.IssueID = issue.IssueID;
            return(issueItem);
        }
        public IssueItem GetIssueItemByID(int issueID)
        {
            var issue = db.Issues.Find(issueID);

            Resident resident = null;

            if (issue.ResidentID != null)
            {
                resident = db.Residents.Find(issue.ResidentID);
            }

            Company company = null;

            if (issue.CompanyID != null)
            {
                company = db.Companys.Find(issue.CompanyID);
            }

            if (issue == null)
            {
                throw new NullReferenceException(String.Format("There is no record in the 'Issue' table with given {0} ID", issueID));
            }

            IssueItem item = new IssueItem();

            if (issue.IssueCategoryID == 1)
            {
                item.IssueID          = issue.IssueID;
                item.IssueName        = issue.IssueName;
                item.IssueDescription = issue.IssueDescription;
                item.IssueDate        = issue.IssueDate;
                item.IssueCategoryID  = issue.IssueCategoryID;
                item.IssueTypeID      = issue.IssueTypeID;

                item.ResidentID = issue.ResidentID;

                if (resident != null)
                {
                    item.FirstName           = resident.FirstName;
                    item.LastName            = resident.LastName;
                    item.MiddleName          = resident.MiddleName;
                    item.IdentificatorNumber = resident.IdentificatorNumber;
                    item.BirthDate           = resident.BirthDate;
                }
            }
            else if (issue.IssueCategoryID == 2)
            {
                item.IssueID          = issue.IssueID;
                item.IssueName        = issue.IssueName;
                item.IssueDescription = issue.IssueDescription;
                item.IssueDate        = issue.IssueDate;
                item.IssueCategoryID  = issue.IssueCategoryID;
                item.IssueTypeID      = issue.IssueTypeID;

                item.CompanyID = issue.CompanyID;

                if (company != null)
                {
                    item.CompanyName = company.CompanyName;
                }
            }
            else
            {
                throw new NullReferenceException(String.Format("The issue have not a category"));
            }
            return(item);
        }