/// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                var hashCode = 41;
                // Suitable nullity checks etc, of course :)

                hashCode = hashCode * 59 + Id.GetHashCode();
                if (When != null)
                {
                    hashCode = hashCode * 59 + When.GetHashCode();
                }
                if (Actual != null)
                {
                    hashCode = hashCode * 59 + Actual.GetHashCode();
                }

                hashCode = hashCode * 59 + WorkTime.GetHashCode();

                hashCode = hashCode * 59 + ContractedTime.GetHashCode();

                hashCode = hashCode * 59 + PayState.GetHashCode();
                if (EmployeeType != null)
                {
                    hashCode = hashCode * 59 + EmployeeType.GetHashCode();
                }
                if (Person != null)
                {
                    hashCode = hashCode * 59 + Person.GetHashCode();
                }
                if (Assignment != null)
                {
                    hashCode = hashCode * 59 + Assignment.GetHashCode();
                }
                if (Post != null)
                {
                    hashCode = hashCode * 59 + Post.GetHashCode();
                }
                if (Posting != null)
                {
                    hashCode = hashCode * 59 + Posting.GetHashCode();
                }
                if (Cancellation != null)
                {
                    hashCode = hashCode * 59 + Cancellation.GetHashCode();
                }

                hashCode = hashCode * 59 + InCharge.GetHashCode();
                if (Shift != null)
                {
                    hashCode = hashCode * 59 + Shift.GetHashCode();
                }
                if (Duty != null)
                {
                    hashCode = hashCode * 59 + Duty.GetHashCode();
                }
                if (Fulfillment != null)
                {
                    hashCode = hashCode * 59 + Fulfillment.GetHashCode();
                }
                if (CostCentre != null)
                {
                    hashCode = hashCode * 59 + CostCentre.GetHashCode();
                }
                if (OwningUnit != null)
                {
                    hashCode = hashCode * 59 + OwningUnit.GetHashCode();
                }
                if (ResourcingUnit != null)
                {
                    hashCode = hashCode * 59 + ResourcingUnit.GetHashCode();
                }
                if (Requirement != null)
                {
                    hashCode = hashCode * 59 + Requirement.GetHashCode();
                }
                if (Location != null)
                {
                    hashCode = hashCode * 59 + Location.GetHashCode();
                }
                if (AdditionalDutyReason != null)
                {
                    hashCode = hashCode * 59 + AdditionalDutyReason.GetHashCode();
                }

                hashCode = hashCode * 59 + DutyHasWarnings.GetHashCode();
                return(hashCode);
            }
        }