|
- <%
- ' HouseholdController - CRUD controller for Households
- ' NorthTerritory app
- '
- ' Dependencies:
- ' - app/models/POBO_Households.asp
- ' - app/models/HouseholdsRepository.asp
- ' - app/models/POBO_HouseholderNames.asp
- ' - app/models/HouseholderNamesRepository.asp
- %>
- <!--#include file="../models/POBO_Households.asp" -->
- <!--#include file="../models/HouseholdsRepository.asp" -->
- <!--#include file="../models/POBO_HouseholderNames.asp" -->
- <!--#include file="../models/HouseholderNamesRepository.asp" -->
- <%
-
- Class HouseholdController_Class
- Private m_useLayout
- Private m_title
-
- ' Public properties for views
- Public households ' LinkedList for Index
- Public household ' Single POBO for Show/Edit
- Public territoriesList ' For dropdown
- Public territoryNamesById ' Dictionary for territory labels
- Public householderNames ' LinkedList for Show
-
- ' Pagination properties
- Public currentPage
- Public pageCount
- Public recordCount
- Public perPage
- Public searchTerm
- Public filterTerritoryId
- Public filterDoNotCall
-
- Private Sub Class_Initialize()
- m_useLayout = True
- m_title = "Households"
- currentPage = 1
- pageCount = 0
- recordCount = 0
- perPage = 25
- searchTerm = ""
- filterTerritoryId = 0
- filterDoNotCall = -1
- End Sub
-
- Public Property Get useLayout
- useLayout = m_useLayout
- End Property
-
- Public Property Let useLayout(v)
- m_useLayout = v
- End Property
-
- Public Property Get Title
- Title = m_title
- End Property
-
- Public Property Let Title(v)
- m_title = v
- End Property
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Index - List all households with pagination, search, and territory filter
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Index()
- ' Get pagination params
- If Request.QueryString("page") <> "" And IsNumeric(Request.QueryString("page")) Then
- currentPage = CInt(Request.QueryString("page"))
- If currentPage < 1 Then currentPage = 1
- End If
-
- ' Get search param
- searchTerm = Trim(Request.QueryString("q") & "")
-
- ' Get territory filter
- If Request.QueryString("territory") <> "" And IsNumeric(Request.QueryString("territory")) Then
- filterTerritoryId = CInt(Request.QueryString("territory"))
- End If
-
- If Request.QueryString("dnc") <> "" Then
- If Request.QueryString("dnc") = "1" Then
- filterDoNotCall = 1
- ElseIf Request.QueryString("dnc") = "0" Then
- filterDoNotCall = 0
- End If
- End If
-
- ' Load territories for filter dropdown
- Set territoriesList = TerritoriesRepository.GetAll(Empty)
- Set territoryNamesById = BuildTerritoryNamesById(territoriesList)
-
- ' Fetch households with pagination
- If searchTerm <> "" And filterDoNotCall <> -1 Then
- Set households = HouseholdsRepository.SearchTablePagedByDoNotCall( _
- Array("Address", "StreetName"), _
- searchTerm, _
- filterDoNotCall, _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- ElseIf searchTerm <> "" Then
- ' Search in Address and StreetName columns
- Set households = HouseholdsRepository.SearchTablePaged( _
- Array("Address", "StreetName"), _
- searchTerm, _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- ElseIf filterTerritoryId > 0 And filterDoNotCall <> -1 Then
- Set households = HouseholdsRepository.FindPagedByTerritoryAndDoNotCall( _
- filterTerritoryId, _
- filterDoNotCall, _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- ElseIf filterTerritoryId > 0 Then
- ' Filter by territory
- Set households = HouseholdsRepository.FindPaged( _
- Array("TerritoryId", filterTerritoryId), _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- ElseIf filterDoNotCall <> -1 Then
- Set households = HouseholdsRepository.FindPaged( _
- Array("DoNotCall", filterDoNotCall), _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- Else
- Set households = HouseholdsRepository.FindPaged( _
- Empty, _
- Empty, _
- perPage, _
- currentPage, _
- pageCount, _
- recordCount _
- )
- End If
-
- %> <!--#include file="../views/Household/index.asp" --> <%
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Show - Display a single household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Show(id)
- On Error Resume Next
- Set household = HouseholdsRepository.FindByID(id)
- If Err.Number <> 0 Or household Is Nothing Then
- On Error GoTo 0
- Flash().AddError "Household not found."
- Response.Redirect "/households"
- Exit Sub
- End If
- On Error GoTo 0
-
- ' Load householder names for this household
- Set householderNames = HouseholderNamesRepository.Find( _
- Array("HouseholdId", id), _
- "Name" _
- )
-
- %> <!--#include file="../views/Household/show.asp" --> <%
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' MarkReturned - Quick action to mark a householder name as returned
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub MarkReturned(id)
- Dim householderId, hn, householdId
- householderId = Request.Form("householder_id")
-
- If householderId = "" Or Not IsNumeric(householderId) Then
- Flash().Error = "Invalid householder ID."
- Response.Redirect "/households/" & id
- Exit Sub
- End If
-
- On Error Resume Next
- Set hn = HouseholderNamesRepository.FindByID(CLng(householderId))
- If Err.Number <> 0 Or hn Is Nothing Then
- On Error GoTo 0
- Flash().Error = "Householder name not found."
- Response.Redirect "/households/" & id
- Exit Sub
- End If
- On Error GoTo 0
-
- ' Toggle the returned status
- If hn.LetterReturned = 1 Then
- hn.LetterReturned = 0
- hn.ReturnDate = #1/1/1970#
- Else
- hn.LetterReturned = 1
- hn.ReturnDate = Now()
- End If
-
- HouseholderNamesRepository.Update hn
-
- If hn.LetterReturned = 1 Then
- Flash().Success = "Marked as returned."
- Else
- Flash().Success = "Marked as not returned."
- End If
- Response.Redirect "/households/" & id
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Create - Display form for new household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Create()
- Set household = New POBO_Households
-
- ' Pre-fill territory if passed in query string
- If Request.QueryString("territory") <> "" And IsNumeric(Request.QueryString("territory")) Then
- household.TerritoryId = CInt(Request.QueryString("territory"))
- End If
-
- ' Load territories for dropdown
- Set territoriesList = TerritoriesRepository.GetAll(Empty)
-
- %> <!--#include file="../views/Household/create.asp" --> <%
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Store - Save new household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Store()
- Set household = New POBO_Households
- household.Address = Trim(Request.Form("Address"))
- household.StreetNumber = Request.Form("StreetNumber")
- household.StreetName = Trim(Request.Form("StreetName"))
- household.Latitude = Trim(Request.Form("Latitude"))
- household.Longitude = Trim(Request.Form("Longitude"))
- household.IsBusiness = IIf(Request.Form("IsBusiness") = "1", 1, 0)
- household.DoNotCall = IIf(Request.Form("DoNotCall") = "1", 1, 0)
- household.DoNotCallNotes = Trim(Request.Form("DoNotCallNotes"))
- household.DoNotCallPrivateNotes = Trim(Request.Form("DoNotCallPrivateNotes"))
- household.TerritoryId = Request.Form("TerritoryId")
-
- If Request.Form("DoNotCallDate") <> "" Then
- household.DoNotCallDate = CDate(Request.Form("DoNotCallDate"))
- ElseIf household.DoNotCall = 1 Then
- household.DoNotCallDate = Date()
- Else
- household.DoNotCallDate = Null
- End If
-
- ' Validation
- If household.Address = "" Then
- Flash().AddError "Address is required."
- Response.Redirect "/households/new"
- Exit Sub
- End If
-
- If Not IsNumeric(household.TerritoryId) Or CInt(household.TerritoryId) < 1 Then
- Flash().AddError "Please select a territory."
- Response.Redirect "/households/new"
- Exit Sub
- End If
-
- HouseholdsRepository.AddNew household
-
- Flash().Success = "Household created successfully."
- Response.Redirect "/households/" & household.Id
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Edit - Display form to edit household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Edit(id)
- On Error Resume Next
- Set household = HouseholdsRepository.FindByID(id)
- If Err.Number <> 0 Or household Is Nothing Then
- On Error GoTo 0
- Flash().AddError "Household not found."
- Response.Redirect "/households"
- Exit Sub
- End If
- On Error GoTo 0
-
- ' Load territories for dropdown
- Set territoriesList = TerritoriesRepository.GetAll(Empty)
-
- %> <!--#include file="../views/Household/edit.asp" --> <%
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Update - Save changes to household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Update(id)
- On Error Resume Next
- Set household = HouseholdsRepository.FindByID(id)
- If Err.Number <> 0 Or household Is Nothing Then
- On Error GoTo 0
- Flash().AddError "Household not found."
- Response.Redirect "/households"
- Exit Sub
- End If
- On Error GoTo 0
-
- household.Address = Trim(Request.Form("Address"))
- household.StreetNumber = Request.Form("StreetNumber")
- household.StreetName = Trim(Request.Form("StreetName"))
- household.Latitude = Trim(Request.Form("Latitude"))
- household.Longitude = Trim(Request.Form("Longitude"))
- household.IsBusiness = IIf(Request.Form("IsBusiness") = "1", 1, 0)
- household.DoNotCall = IIf(Request.Form("DoNotCall") = "1", 1, 0)
- household.DoNotCallNotes = Trim(Request.Form("DoNotCallNotes"))
- household.DoNotCallPrivateNotes = Trim(Request.Form("DoNotCallPrivateNotes"))
- household.TerritoryId = Request.Form("TerritoryId")
-
- If Request.Form("DoNotCallDate") <> "" Then
- household.DoNotCallDate = CDate(Request.Form("DoNotCallDate"))
- ElseIf household.DoNotCall = 1 Then
- If IsNull(household.DoNotCallDate) Then
- household.DoNotCallDate = Date()
- ElseIf Trim(CStr(household.DoNotCallDate)) = "" Then
- household.DoNotCallDate = Date()
- End If
- Else
- household.DoNotCallDate = Null
- End If
-
- ' Validation
- If household.Address = "" Then
- Flash().AddError "Address is required."
- Response.Redirect "/households/" & id & "/edit"
- Exit Sub
- End If
-
- HouseholdsRepository.Update household
-
- Flash().Success = "Household updated successfully."
- Response.Redirect "/households/" & id
- End Sub
-
- '-------------------------------------------------------------------------------------------------------------------
- ' Delete - Remove a household
- '-------------------------------------------------------------------------------------------------------------------
- Public Sub Delete(id)
- On Error Resume Next
- Set household = HouseholdsRepository.FindByID(id)
- If Err.Number <> 0 Or household Is Nothing Then
- On Error GoTo 0
- Flash().AddError "Household not found."
- Response.Redirect "/households"
- Exit Sub
- End If
- On Error GoTo 0
-
- HouseholdsRepository.Delete id
-
- Flash().Success = "Household deleted successfully."
- Response.Redirect "/households"
- End Sub
-
- Private Function BuildTerritoryNamesById(territories)
- Dim dict : Set dict = Server.CreateObject("Scripting.Dictionary")
- Dim iter, territory
- Set iter = territories.Iterator()
- Do While iter.HasNext()
- Set territory = iter.GetNext()
- dict(CStr(territory.Id)) = territory.Name & ""
- Loop
- Set BuildTerritoryNamesById = dict
- End Function
-
- End Class
-
- ' Singleton instance
- Dim HouseholdController_Class__Singleton
- Function HouseholdController()
- If IsEmpty(HouseholdController_Class__Singleton) Then
- Set HouseholdController_Class__Singleton = New HouseholdController_Class
- End If
- Set HouseholdController = HouseholdController_Class__Singleton
- End Function
- %>
|