Imports System.ComponentModel.DataAnnotations Imports System.Web.Script.Serialization Imports System.ServiceModel.Syndication Imports System.Web Imports System.Text Public Class Proposal Inherits RavenModelBase Public Property Key_Representation As String Private _Representation As Representation Public Property Representation As Representation Get If _Representation Is Nothing Then _Representation = GlobalData.Representations.GetByKey(Me.Key_Representation.ToLower) End If Return _Representation End Get Set(value As Representation) _Representation = value End Set End Property Public Property Title As String Public Property IsTest() As Boolean Public Property Text As String Public ReadOnly Property TextHtml() As String Get Dim txt As String = HttpUtility.UrlDecode(Me.Text) Dim str As String = MarkdownHelper.Markdown(txt).ToHtmlString 'str = str.CleanHtmlCode() Return str End Get End Property Public ReadOnly Property TextRaw() As String Get Dim txt As String = HttpUtility.UrlDecode(Me.Text) Return MarkdownHelper.MarkdownText(txt) End Get End Property Public ReadOnly Property TextMarkdown() As String Get Dim txt As String = HttpUtility.UrlDecode(Me.Text) Return txt End Get End Property Public Property TitleUrl As String Public ReadOnly Property FullUrl As String Get Dim stb As New StringBuilder(Me.Representation.FullUrl) If String.IsNullOrEmpty(Me.TitleUrl) = False Then stb.Append("/").Append(Me.TitleUrl) End If Return stb.ToString End Get End Property Public Property UpdatedAt As String Public ReadOnly Property UpdatedAtFormat As String Get If String.IsNullOrEmpty(Me.UpdatedAt) = False Then Return CType(Me.UpdatedAt, DateTime).ToString("dd.MM.yy HH:mm") Else Return "" End If End Get End Property Private _updatedTimestamp As Integer = 0 Public Property UpdatedTimestamp As Integer Get Try If _updatedTimestamp = 0 Then _updatedTimestamp = Tools.GetUnixTimestampFromDate(CType(Me.UpdatedAt, DateTime)) End If Catch ex As Exception End Try Return _updatedTimestamp End Get Set(value As Integer) _updatedTimestamp = value End Set End Property Private _UpdatedBy As String Public Property UpdatedBy As String Get Return _UpdatedBy End Get Set(value As String) _UpdatedBy = value End Set End Property Public Property Tags As List(Of String) Public ReadOnly Property TagsList As String Get If Me.Tags IsNot Nothing Then Return String.Join(",", Me.Tags) Else Return "" End If End Get End Property Public ReadOnly Property HasTags As Boolean Get Dim b As Boolean b = Me.Tags Is Nothing If b = False Then b = (Me.Tags.Count = 0) If b = False Then b = Me.Tags.Count = 1 AndAlso Me.Tags(0).Length = 0 Return Not b End Get End Property Public Property ShortUrl As String Public Property ExternalUrl As String Public Property ExternalShortUrl As String Public Property Key_Representative As String Public ReadOnly Property Representative As Representative Get Dim rv As Representative = Nothing If String.IsNullOrEmpty(Me.Key_Representative) = False And Me.Representation.Representatives.Count > 0 Then Dim query = From r As Representative In Me.Representation.Representatives Where r.Key = Me.Key_Representative Select r If query.Count > 0 Then rv = query.First End If End If Return rv End Get End Property Public Property Key_Committee As String Public ReadOnly Property Committee As Committee Get Dim cm As Committee = Nothing If String.IsNullOrEmpty(Me.Key_Committee) = False And Me.Representation.Committees.Count > 0 Then Dim query = From c As Committee In Me.Representation.Committees Where c.Key = Me.Key_Committee Select c If query.Count > 0 Then cm = query.First End If End If Return cm End Get End Property Public Property AbuseMessage() As String Public ReadOnly Property AbuseMessageHtml() As String Get Dim cmt As String = HttpUtility.UrlDecode(Me.AbuseMessage) Return MarkdownHelper.Markdown(cmt).ToHtmlString End Get End Property Public ReadOnly Property AbuseMessageText() As String Get Dim msg As String = HttpUtility.UrlDecode(Me.AbuseMessage) Return MarkdownHelper.MarkdownText(msg) End Get End Property Public ReadOnly Property IsAbuse() As Boolean Get Return Not String.IsNullOrEmpty(Me.AbuseMessage) End Get End Property Public Property CommentingClosedDate As String Public ReadOnly Property IsCommentingClosed() As Boolean Get Return Not String.IsNullOrEmpty(Me.CommentingClosedDate) End Get End Property Public Property ID_CurrentProposalStep As String Public ReadOnly Property CurrentProposalStep As ProposalStep Get Dim ps As ProposalStep = Nothing If String.IsNullOrEmpty(Me.ID_CurrentProposalStep) = False And Me.ProposalSteps.Count > 0 Then Dim query = From s As ProposalStep In Me.ProposalSteps Where s.Id = Me.ID_CurrentProposalStep Select s If query.Count > 0 Then ps = query.First End If End If Return ps End Get End Property Public Property ProposalSteps As New List(Of ProposalStep) Public ReadOnly Property ProposalStepStack As List(Of ProposalStep) Get Dim query = From ps As ProposalStep In Me.ProposalSteps Where ps.Id <> Me.ID_CurrentProposalStep Order By ps.Id Descending Select ps Return query.ToList End Get End Property Public ReadOnly Property ProposalStepList As List(Of ProposalStep) Get Dim query = From ps As ProposalStep In Me.ProposalSteps Order By ps.Id Select ps Return query.ToList End Get End Property Public Property ProposalComments As New List(Of ProposalComment) Public ReadOnly Property ProposalCommentCountCaption As String Get Select Case Me.ProposalComments.Count Case 0 : Return "keine Kommentare" Case 1 : Return "1 Kommentar" Case Else : Return String.Concat(Me.ProposalComments.Count, " Kommentare") End Select End Get End Property Public Property ContactInfo() As String = Nothing Public Property RatingCount As Integer = 0 Public Property RatingSum As Integer = 0 Public ReadOnly Property Rating As Integer Get If Me.RatingSum > 0 Then Return Math.Round(Me.RatingSum / Me.RatingCount, 0, MidpointRounding.AwayFromZero) Else Return 0 End If End Get End Property Public Property SuccessStoryStatus As Integer = 0 Public Property ID_SuccessStory As String Public ReadOnly Property HasSuccessStory As Boolean Get Return (Not String.IsNullOrEmpty(Me.ID_SuccessStory)) End Get End Property Public ReadOnly Property FeedItem As SyndicationItem Get Dim stbText As New StringBuilder 'stbText.Append("") 'stbText.Append("]]>") Dim si As New SyndicationItem(String.Concat(Me.Title, " (", Me.Representation.Name, ")"), "", New Uri(Me.FullUrl), Me.IdNumber, Me.CreatedAt) si.Content = New CDataSyndicationContent(New TextSyndicationContent(stbText.ToString, TextSyndicationContentKind.Html)) With si .PublishDate = CType(Me.CreatedAt, DateTimeOffset) End With Return si End Get End Property Public Sub New() End Sub Public Sub New(representation As Representation) Me.CreatedAt = Format(DateTime.Now, "dd.MM.yyyy HH:mm:ss") Me.Representation = representation Me.Key_Representation = Me.Representation.Key End Sub Public Sub FillProcessSteps() If Me.Representation IsNot Nothing AndAlso Me.Representation.ProcessSteps IsNot Nothing Then For Each ps As ProposalStep In Me.ProposalSteps Dim query = From p As ProcessStep In Me.Representation.ProcessSteps Where p.ID = ps.ID_ProcessStep Select p If query.Count > 0 Then ps.ProcessStep = query.First() End If Next End If End Sub End Class Public Class ProposalStep Inherits RavenModelBase Public Property ID_ProcessStep As Integer Public Property ProcessStep As ProcessStep Public Property Info As String Public ReadOnly Property InfoHtml() As String Get Dim cmt As String = HttpUtility.UrlDecode(Me.Info) Return MarkdownHelper.Markdown(cmt).ToHtmlString End Get End Property Public ReadOnly Property InfoText() As String Get Dim cmt As String = HttpUtility.UrlDecode(Me.Info) Return MarkdownHelper.MarkdownText(cmt) End Get End Property Public ReadOnly Property InfoMarkdown() As String Get Dim txt As String = HttpUtility.UrlDecode(Me.Info) Return txt End Get End Property Public Sub New() Me.CreatedAt = Format(DateTime.Now, "dd.MM.yyyy HH:mm:ss") If HttpContext.Current.User.Identity.IsAuthenticated = True Then Me.CreatedBy = HttpContext.Current.User.Identity.Name End If End Sub End Class