'****************************************************************************************************************
'* Id Application modified by:   Date(MM/dd/yyyy)   Description													*
'* -- ------------------------   --------           -------------------------------------------	    			*
'* 01 Raśl Callupe - PACNET      03/10/2006         Creation of the Constants class used in order to            *
'*                                                  put just constant variables                                 *
'* 02 Raśl Callupe - PACNET      03/10/2006         Creation of the ApplicationMenu class used in order to      *
'*                                                  create the menu options                                     *
'* 03 Raśl Callupe - PACNET      03/10/2006         Creation of the DateConfiguration class used in order to    *
'*                                                  get dates regarding the client request                      *
'* 04 Raśl Callupe - PACNET      03/29/2006         Creation of the Util class                                  *
'****************************************************************************************************************

Imports System.Globalization
Imports System
Imports System.Configuration

'Start, id: 01
Public Class Constants
    'For session
    Public Const CONST_TYPE_SESSION_NAME As String = "CAMS_USER"
    'End session

    'For Cookies
    Public Const CONST_TYPE_COOKIE As String = "CAMS"
    Public Const CONST_TYPE_COOKIE_LOGIN_USER As String = "LOGIN_USER"
    'End Cookies

    'Error and message codes
    Public Const CONST_ERROR_ACCESSDENIED_TOPAGE As Integer = 11
    Public Const CONST_ERROR_ACCESSDENIED_TOCASE As Integer = 12
    Public Const CONST_ERROR_ACCESSDENIED_TOAPP As Integer = 13
    Public Const CONST_ERROR_SESSION_EXPIRED As Integer = 21
    Public Const CONST_ERROR_USER_IN_CASE_HA As Integer = 31
    Public Const CONST_ERROR_USER_IN_CASE_TA As Integer = 32
    Public Const CONST_ERROR_USER_IN_GRANTOFFICE As Integer = 33
    Public Const CONST_ERROR_USER_NOTDELETED As Integer = 34
    Public Const CONST_MSG_INSERT_SUCCES As String = "INS_SUCCESS"
    Public Const CONST_MSG_INSERT_NOSUCCES As String = "INS_NOSUCCESS"
    Public Const CONST_MSG_INSERT_CLIENT_INFOEXISTS As String = "INFO_EXISTS"
    Public Const CONST_MSG_INSERT_CLIENT_IDEXISTS As String = "ID_EXISTS"
    Public Const CONST_MSG_UPDATE_SUCCES As String = "UPD_SUCCESS"
    Public Const CONST_MSG_UPDATE_NOSUCCES As String = "UPD_NOSUCCESS"
    Public Const CONST_MSG_UPDATE_OLDNOEXISTS As String = "OLDID_NOEXISTS"
    Public Const CONST_MSG_UPDATE_NEWEXISTS As String = "NEWID_EXISTS"
    Public Const CONST_MSG_DELETE_SUCCES As String = "DEL_SUCCESS"
    Public Const CONST_MSG_DELETE_NOSUCCES As String = "DEL_NOSUCCESS"
    Public Const CONST_MSG_DELETE_NOEXISTS As String = "NOEXISTS"
    Public Const CONST_ERROR_UNEXPECTED As String = "ERROR_UNEXPECTED"
    'End error codes

    'Case Status
    Public Const CONST_CASESTATUS_NORMAL As String = "N"
    Public Const CONST_CASESTATUS_ATTENTION As String = "A"
    Public Const CONST_CASESTATUS_IMMATTENTION As String = "IA"
    Public Const CONST_CASESTATUS_CLOSED As String = "CL"
    Public Const CONST_CASESTATUS_CANCELLED As String = "CA"
    'End Case Status

    'Case Stage
    Public Const CONST_CASESTAGE_PRELIM As String = "PRELIM"
    Public Const CONST_CASESTAGE_OG As String = "OG"
    Public Const CONST_CASESTAGE_APP As String = "APP"
    Public Const CONST_CASESTAGE_APQ As String = "APQ"
    Public Const CONST_CASESTAGE_SL21 As String = "SL21"
    Public Const CONST_CASESTAGE_OS As String = "OS"
    Public Const CONST_CASESTAGE_COS As String = "COS"
    Public Const CONST_CASESTAGE_COMP As String = "COMP"
    'End Case

    'Access group
    Public Const CONST_ACCESSGROUP_HA As String = "HA"
    Public Const CONST_ACCESSGROUP_TA As String = "TA"
    Public Const CONST_ACCESSGROUP_MA As String = "MA"
    Public Const CONST_ACCESSGROUP_AO As String = "AO"
    'End Access Group

    'Email Formats
    Public Const CONST_NOTIF_FORMAT_SL21ISSUED_SUBJECT As String = "SL21 Issued: <CASEID> - <APPLNIN>"
    Public Const CONST_NOTIF_FORMAT_SL21ISSUED_BODY As String = "Client's Surname: <SURNAME> <br>" & _
                                                                "Client's Name: <NAME>"
    Public Const CONST_NOTIF_FORMAT_CASEUNLOCKED_SUBJECT As String = "Case unlocked: <CASEID> - <APPLNIN>"
    Public Const CONST_NOTIF_FORMAT_CASEUNLOCKED_BODY As String = "Client's Surname: <SURNAME> <br>" & _
                                                                "Client's Name: <NAME>"
    'End Email Formats

    'Menu's Constants
    Public Const MENU_HOME_ID As Integer = 10

    Public Const MENU_NEW_ID As Integer = 20
    Public Const MENU_NEW_CASE_ID As Integer = 21
    Public Const MENU_NEW_CLIENT_ID As Integer = 22

    Public Const MENU_SEARCH_ID As Integer = 30
    Public Const MENU_SEARCH_ALLCASES_ID As Integer = 31
    Public Const MENU_SEARCH_CASEBYID_ID As Integer = 32
    Public Const MENU_SEARCH_MYCASES_ID As Integer = 33
    Public Const MENU_SEARCH_MYCASES_NORMAL_ID As Integer = 331
    Public Const MENU_SEARCH_MYCASES_ATTENTION_ID As Integer = 332
    Public Const MENU_SEARCH_MYCASES_IMMEDIATE_ID As Integer = 333
    Public Const MENU_SEARCH_CLIENT_ID As Integer = 34

    Public Const MENU_SPREADSHEET_ID As Integer = 40
    Public Const MENU_SPREADSHEET_IMPORT_ID As Integer = 41
    Public Const MENU_SPREADSHEET_EXPORT_ID As Integer = 42
    Public Const MENU_SPREADSHEET_WOFFLINE_ID As Integer = 43

    Public Const MENU_MAINTENANCE_ID As Integer = 50
    Public Const MENU_MAINTENANCE_CONTRACTOR_ID As Integer = 51
    Public Const MENU_MAINTENANCE_GRANTOFFICE_ID As Integer = 52
    Public Const MENU_MAINTENANCE_PROFESSIONAL_ID As Integer = 53
    Public Const MENU_MAINTENANCE_GRANTTYPE_ID As Integer = 54

    Public Const MENU_REPORTS_ID As Integer = 60
    Public Const MENU_REPORTS_TARGETSMET_ID As Integer = 61
    Public Const MENU_REPORTS_QSUMM_ID As Integer = 62
    Public Const MENU_REPORTS_WORKINDAREAS_ID As Integer = 63
    Public Const MENU_REPORTS_GRANTTYPEINDAREAS_ID As Integer = 64
    Public Const MENU_REPORTS_CONTRACTOR_ID As Integer = 65
    Public Const MENU_REPORTS_CONTRACTOR_WORKLOAD_ID As Integer = 651
    Public Const MENU_REPORTS_CONTRACTOR_STAGEANALYSIS_ID As Integer = 652

    Public Const MENU_SETTINGS_ID As Integer = 70
    Public Const MENU_SETTINGS_USERS_ID As Integer = 71
    Public Const MENU_SETTINGS_THRESHOLD_ID As Integer = 72

    'End Menu's Constants

End Class
'End, id: 01

'Start, id: 02
Public Class ApplicationMenu

    Shared Function createMenuOptions() As MenuItem()
        Dim mnuOptions(6) As MenuItem
        Dim strAppPath As String = ConfigurationSettings.AppSettings("AppPath")

        If strAppPath.EndsWith("/") = False Then
            strAppPath &= "/"
        End If

        'Headers
        mnuOptions(0) = New MenuItem(Constants.MENU_HOME_ID, "Home", strAppPath & "frmHome.aspx", True)
        mnuOptions(0).IsHome = True
        mnuOptions(1) = New MenuItem(Constants.MENU_NEW_ID, "New", strAppPath & "New/frmClients.aspx", True)
        mnuOptions(2) = New MenuItem(Constants.MENU_SEARCH_ID, "Search", strAppPath & "Search/frmByCaseId.aspx", True)
        mnuOptions(3) = New MenuItem(Constants.MENU_SPREADSHEET_ID, "Spreadsheet", strAppPath & "Spreadsheet/frmImport.aspx", True)
        mnuOptions(4) = New MenuItem(Constants.MENU_MAINTENANCE_ID, "Maintenance", strAppPath & "Maintenance/frmProfessionals.aspx", True)
        mnuOptions(5) = New MenuItem(Constants.MENU_REPORTS_ID, "Reports", strAppPath & "Reports/frmTargetsMet.aspx", True)
        mnuOptions(6) = New MenuItem(Constants.MENU_SETTINGS_ID, "Settings", strAppPath & "Settings/frmUsers.aspx", True)

        'Options
        Dim submnuOptionsNew(1) As MenuItem
        submnuOptionsNew(0) = New MenuItem(Constants.MENU_NEW_CLIENT_ID, "Client", strAppPath & "New/frmClients.aspx", False)
        submnuOptionsNew(1) = New MenuItem(Constants.MENU_NEW_CASE_ID, "Case", strAppPath & "New/frmCase.aspx", False)
        mnuOptions(1).SubOptions = submnuOptionsNew

        Dim submnuOptionsSearch(3) As MenuItem
        submnuOptionsSearch(0) = New MenuItem(Constants.MENU_SEARCH_CASEBYID_ID, "Case by ID", strAppPath & "Search/frmByCaseId.aspx", False)
        submnuOptionsSearch(1) = New MenuItem(Constants.MENU_SEARCH_ALLCASES_ID, "All Cases", strAppPath & "Search/frmAllCases.aspx", False)
        submnuOptionsSearch(2) = New MenuItem(Constants.MENU_SEARCH_MYCASES_ID, "My Cases", strAppPath & "Search/frmMyCases.aspx?status=" & Constants.CONST_CASESTATUS_NORMAL, True)
        submnuOptionsSearch(3) = New MenuItem(Constants.MENU_SEARCH_CLIENT_ID, "Client", strAppPath & "Search/frmSClient.aspx", False)
        mnuOptions(2).SubOptions = submnuOptionsSearch

        Dim submnuOptionsSpreadsheet(2) As MenuItem
        submnuOptionsSpreadsheet(0) = New MenuItem(Constants.MENU_SPREADSHEET_IMPORT_ID, "Import", strAppPath & "Spreadsheet/frmImport.aspx", False)
        submnuOptionsSpreadsheet(1) = New MenuItem(Constants.MENU_SPREADSHEET_EXPORT_ID, "Export", strAppPath & "Spreadsheet/frmExportCases.aspx", False)
        submnuOptionsSpreadsheet(2) = New MenuItem(Constants.MENU_SPREADSHEET_WOFFLINE_ID, "Work Offline", strAppPath & "Spreadsheet/frmWorkOffline.aspx", False)
        mnuOptions(3).SubOptions = submnuOptionsSpreadsheet

        Dim submnuOptionsMaintenance(3) As MenuItem
        submnuOptionsMaintenance(0) = New MenuItem(Constants.MENU_MAINTENANCE_PROFESSIONAL_ID, "Professional", strAppPath & "Maintenance/frmProfessionals.aspx", False)
        submnuOptionsMaintenance(1) = New MenuItem(Constants.MENU_MAINTENANCE_CONTRACTOR_ID, "Contractor", strAppPath & "Maintenance/frmContractors.aspx", False)
        submnuOptionsMaintenance(2) = New MenuItem(Constants.MENU_MAINTENANCE_GRANTOFFICE_ID, "Grant Office", strAppPath & "Maintenance/frmGrantOffices.aspx", False)
        submnuOptionsMaintenance(3) = New MenuItem(Constants.MENU_MAINTENANCE_GRANTTYPE_ID, "Grant Type", strAppPath & "Maintenance/frmGrantTypes.aspx", False)
        mnuOptions(4).SubOptions = submnuOptionsMaintenance

        Dim submnuOptionsReports(4) As MenuItem
        submnuOptionsReports(0) = New MenuItem(Constants.MENU_REPORTS_TARGETSMET_ID, "Targets Met/Not Met", strAppPath & "Reports/frmTargetsMet.aspx", False)
        submnuOptionsReports(1) = New MenuItem(Constants.MENU_REPORTS_QSUMM_ID, "Quarterly Summary", strAppPath & "Reports/frmQSummary.aspx", False)
        submnuOptionsReports(2) = New MenuItem(Constants.MENU_REPORTS_WORKINDAREAS_ID, "Work by Ind. Areas", strAppPath & "Reports/frmWorkByAreas.aspx", False)
        submnuOptionsReports(3) = New MenuItem(Constants.MENU_REPORTS_GRANTTYPEINDAREAS_ID, "Grant Type by Ind. Areas", strAppPath & "Reports/frmGTByAreas.aspx", False)
        submnuOptionsReports(4) = New MenuItem(Constants.MENU_REPORTS_CONTRACTOR_ID, "Contractor", strAppPath & "Reports/frmContractorWorkload.aspx", True)
        mnuOptions(5).SubOptions = submnuOptionsReports

        Dim submnuOptionsSettings(1) As MenuItem
        submnuOptionsSettings(0) = New MenuItem(Constants.MENU_SETTINGS_USERS_ID, "Users", strAppPath & "Settings/frmUsers.aspx", False)
        submnuOptionsSettings(1) = New MenuItem(Constants.MENU_SETTINGS_THRESHOLD_ID, "Thresholds Reminders", strAppPath & "Settings/frmReminders.aspx", False)
        mnuOptions(6).SubOptions = submnuOptionsSettings

        'SubOptions
        Dim submnuSubOptionsSearchMyCases(2) As MenuItem
        submnuSubOptionsSearchMyCases(0) = New MenuItem(Constants.MENU_SEARCH_MYCASES_NORMAL_ID, "Normal", strAppPath & "Search/frmMyCases.aspx?status=" & Constants.CONST_CASESTATUS_NORMAL, False)
        submnuSubOptionsSearchMyCases(1) = New MenuItem(Constants.MENU_SEARCH_MYCASES_ATTENTION_ID, "Attention", strAppPath & "Search/frmMyCases.aspx?status=" & Constants.CONST_CASESTATUS_ATTENTION, False)
        submnuSubOptionsSearchMyCases(2) = New MenuItem(Constants.MENU_SEARCH_MYCASES_IMMEDIATE_ID, "Immediate", strAppPath & "Search/frmMyCases.aspx?status=" & Constants.CONST_CASESTATUS_IMMATTENTION, False)
        submnuOptionsSearch(2).SubOptions = submnuSubOptionsSearchMyCases

        Dim submnuSubOptionsReportsContractor(1) As MenuItem
        submnuSubOptionsReportsContractor(0) = New MenuItem(Constants.MENU_REPORTS_CONTRACTOR_WORKLOAD_ID, "Workload", strAppPath & "Reports/frmContractorWorkload.aspx", False)
        submnuSubOptionsReportsContractor(1) = New MenuItem(Constants.MENU_REPORTS_CONTRACTOR_STAGEANALYSIS_ID, "Stage Analysis", strAppPath & "Reports/frmContractorStage.aspx", False)
        submnuOptionsReports(4).SubOptions = submnuSubOptionsReportsContractor

        Return mnuOptions

    End Function

End Class
'End, id: 01

'Start, id: 03
Public Class DateConfiguration

    'Returns 2 values, date in client format, and a date pattern due culture reference
    Shared Function DateInClientFormat(ByVal dFecha As DateTime, ByRef req As HttpRequest) As String()
        Dim _CultureInfo As CultureInfo
        Dim strDateFormat As String
        Dim strFecha(1) As String

        Try
            _CultureInfo = New CultureInfo(req.UserLanguages(0), False)
            strDateFormat = _CultureInfo.DateTimeFormat.ShortDatePattern

            Dim arrDate() As String = strDateFormat.Split("/")

            If arrDate.Length = 3 Then
                For i As Integer = 0 To arrDate.GetUpperBound(0)
                    If arrDate(i).Length = 1 Then
                        If arrDate(i).Equals("M") Then
                            arrDate(i) = "MM"
                        ElseIf arrDate(i).Equals("d") Then
                            arrDate(i) = "dd"
                        End If
                    End If
                Next

                strDateFormat = arrDate(0) & "/" & arrDate(1) & "/" & arrDate(2)

            End If

            strFecha(0) = dFecha.Date.ToString(strDateFormat)
            strFecha(1) = strDateFormat

            Return strFecha
            'Return dFecha.Date.ToString(_CultureInfo.DateTimeFormat.ShortDatePattern)
        Catch ex As Exception
            strFecha(0) = dFecha.Date.ToString("MM/dd/yyyy")
            strFecha(1) = "MM/dd/yyyy"
            Return strFecha
        End Try

    End Function

    'Returns a datetime value regarding to 2 parameters: a string value and the client request
    Shared Function DateInClientFormat(ByVal strfecha As String, ByRef req As HttpRequest) As DateTime
        Dim _CultureInfo As CultureInfo
        Dim dFecha As DateTime

        Try
            _CultureInfo = New CultureInfo(req.UserLanguages(0), False)
            dFecha = Convert.ToDateTime(strfecha, _CultureInfo.DateTimeFormat)
            Return dFecha
        Catch ex As Exception
            dFecha = Convert.ToDateTime(strfecha, New CultureInfo("es-PE", False).DateTimeFormat)
            Return dFecha
        End Try

    End Function

    Shared Function DateInDatabaseFormat(ByVal dFecha As DateTime) As String
        Return dFecha.ToString("yyyy-MM-dd")
    End Function

End Class
'End, id: 03

'start, id 04
Public Class Util
    Shared Sub FillDropDownList(ByRef oSource As Object, _
                                        ByRef oControl As Object, _
                                        ByVal prmValue As String, _
                                        ByVal prmDisplay As String, _
                                              Optional ByVal hasOptionalValue As Boolean = False, _
                                              Optional ByVal listItem As Object = Nothing)
        oControl.DataTextField = prmDisplay
        oControl.DataValueField = prmValue
        oControl.DataSource = oSource
        oControl.DataBind()

        If hasOptionalValue And Not listItem Is Nothing Then
            oControl.Items.Insert(0, listItem)
        End If

    End Sub

    Shared Sub SelectValueFromDropDown(ByRef oControl As Object, ByVal strValue As String)
        Try
            oControl.SelectedIndex = oControl.Items.IndexOf(oControl.Items.FindByValue(strValue))
        Catch
            oControl.SelectedIndex = 0
        End Try

        'If Not strValue Is Nothing Then oControl.Items.FindByValue(strValue).Selected = True
    End Sub

    Shared Function Encrypt(ByVal text)
        Dim cont, caracter, seed, paso
        seed = 64 'Define a number between 50 to 256 to encrypt.
        Encrypt = ""
        'Random 
        Rnd(-1)
        Randomize(seed)
        For cont = 1 To Len(text)
            paso = CInt(seed * Rnd())
            caracter = Asc(Mid(text, cont, 1))
            Encrypt = Encrypt & Chr(caracter Xor paso)
        Next
    End Function

End Class

'End, id 04