Consolidated ASP Classic MVC framework from best components
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

398 řádky
15KB

  1. <%
  2. ' HouseholdController - CRUD controller for Households
  3. ' NorthTerritory app
  4. '
  5. ' Dependencies:
  6. ' - app/models/POBO_Households.asp
  7. ' - app/models/HouseholdsRepository.asp
  8. ' - app/models/POBO_HouseholderNames.asp
  9. ' - app/models/HouseholderNamesRepository.asp
  10. %>
  11. <!--#include file="../models/POBO_Households.asp" -->
  12. <!--#include file="../models/HouseholdsRepository.asp" -->
  13. <!--#include file="../models/POBO_HouseholderNames.asp" -->
  14. <!--#include file="../models/HouseholderNamesRepository.asp" -->
  15. <%
  16. Class HouseholdController_Class
  17. Private m_useLayout
  18. Private m_title
  19. ' Public properties for views
  20. Public households ' LinkedList for Index
  21. Public household ' Single POBO for Show/Edit
  22. Public territoriesList ' For dropdown
  23. Public territoryNamesById ' Dictionary for territory labels
  24. Public householderNames ' LinkedList for Show
  25. ' Pagination properties
  26. Public currentPage
  27. Public pageCount
  28. Public recordCount
  29. Public perPage
  30. Public searchTerm
  31. Public filterTerritoryId
  32. Public filterDoNotCall
  33. Private Sub Class_Initialize()
  34. m_useLayout = True
  35. m_title = "Households"
  36. currentPage = 1
  37. pageCount = 0
  38. recordCount = 0
  39. perPage = 25
  40. searchTerm = ""
  41. filterTerritoryId = 0
  42. filterDoNotCall = -1
  43. End Sub
  44. Public Property Get useLayout
  45. useLayout = m_useLayout
  46. End Property
  47. Public Property Let useLayout(v)
  48. m_useLayout = v
  49. End Property
  50. Public Property Get Title
  51. Title = m_title
  52. End Property
  53. Public Property Let Title(v)
  54. m_title = v
  55. End Property
  56. '-------------------------------------------------------------------------------------------------------------------
  57. ' Index - List all households with pagination, search, and territory filter
  58. '-------------------------------------------------------------------------------------------------------------------
  59. Public Sub Index()
  60. ' Get pagination params
  61. If Request.QueryString("page") <> "" And IsNumeric(Request.QueryString("page")) Then
  62. currentPage = CInt(Request.QueryString("page"))
  63. If currentPage < 1 Then currentPage = 1
  64. End If
  65. ' Get search param
  66. searchTerm = Trim(Request.QueryString("q") & "")
  67. ' Get territory filter
  68. If Request.QueryString("territory") <> "" And IsNumeric(Request.QueryString("territory")) Then
  69. filterTerritoryId = CInt(Request.QueryString("territory"))
  70. End If
  71. If Request.QueryString("dnc") <> "" Then
  72. If Request.QueryString("dnc") = "1" Then
  73. filterDoNotCall = 1
  74. ElseIf Request.QueryString("dnc") = "0" Then
  75. filterDoNotCall = 0
  76. End If
  77. End If
  78. ' Load territories for filter dropdown
  79. Set territoriesList = TerritoriesRepository.GetAll(Empty)
  80. Set territoryNamesById = BuildTerritoryNamesById(territoriesList)
  81. ' Fetch households with pagination
  82. If searchTerm <> "" And filterDoNotCall <> -1 Then
  83. Set households = HouseholdsRepository.SearchTablePagedByDoNotCall( _
  84. Array("Address", "StreetName"), _
  85. searchTerm, _
  86. filterDoNotCall, _
  87. Empty, _
  88. perPage, _
  89. currentPage, _
  90. pageCount, _
  91. recordCount _
  92. )
  93. ElseIf searchTerm <> "" Then
  94. ' Search in Address and StreetName columns
  95. Set households = HouseholdsRepository.SearchTablePaged( _
  96. Array("Address", "StreetName"), _
  97. searchTerm, _
  98. Empty, _
  99. perPage, _
  100. currentPage, _
  101. pageCount, _
  102. recordCount _
  103. )
  104. ElseIf filterTerritoryId > 0 And filterDoNotCall <> -1 Then
  105. Set households = HouseholdsRepository.FindPagedByTerritoryAndDoNotCall( _
  106. filterTerritoryId, _
  107. filterDoNotCall, _
  108. Empty, _
  109. perPage, _
  110. currentPage, _
  111. pageCount, _
  112. recordCount _
  113. )
  114. ElseIf filterTerritoryId > 0 Then
  115. ' Filter by territory
  116. Set households = HouseholdsRepository.FindPaged( _
  117. Array("TerritoryId", filterTerritoryId), _
  118. Empty, _
  119. perPage, _
  120. currentPage, _
  121. pageCount, _
  122. recordCount _
  123. )
  124. ElseIf filterDoNotCall <> -1 Then
  125. Set households = HouseholdsRepository.FindPaged( _
  126. Array("DoNotCall", filterDoNotCall), _
  127. Empty, _
  128. perPage, _
  129. currentPage, _
  130. pageCount, _
  131. recordCount _
  132. )
  133. Else
  134. Set households = HouseholdsRepository.FindPaged( _
  135. Empty, _
  136. Empty, _
  137. perPage, _
  138. currentPage, _
  139. pageCount, _
  140. recordCount _
  141. )
  142. End If
  143. %> <!--#include file="../views/Household/index.asp" --> <%
  144. End Sub
  145. '-------------------------------------------------------------------------------------------------------------------
  146. ' Show - Display a single household
  147. '-------------------------------------------------------------------------------------------------------------------
  148. Public Sub Show(id)
  149. On Error Resume Next
  150. Set household = HouseholdsRepository.FindByID(id)
  151. If Err.Number <> 0 Or household Is Nothing Then
  152. On Error GoTo 0
  153. Flash().AddError "Household not found."
  154. Response.Redirect "/households"
  155. Exit Sub
  156. End If
  157. On Error GoTo 0
  158. ' Load householder names for this household
  159. Set householderNames = HouseholderNamesRepository.Find( _
  160. Array("HouseholdId", id), _
  161. "Name" _
  162. )
  163. %> <!--#include file="../views/Household/show.asp" --> <%
  164. End Sub
  165. '-------------------------------------------------------------------------------------------------------------------
  166. ' MarkReturned - Quick action to mark a householder name as returned
  167. '-------------------------------------------------------------------------------------------------------------------
  168. Public Sub MarkReturned(id)
  169. Dim householderId, hn, householdId
  170. householderId = Request.Form("householder_id")
  171. If householderId = "" Or Not IsNumeric(householderId) Then
  172. Flash().Error = "Invalid householder ID."
  173. Response.Redirect "/households/" & id
  174. Exit Sub
  175. End If
  176. On Error Resume Next
  177. Set hn = HouseholderNamesRepository.FindByID(CLng(householderId))
  178. If Err.Number <> 0 Or hn Is Nothing Then
  179. On Error GoTo 0
  180. Flash().Error = "Householder name not found."
  181. Response.Redirect "/households/" & id
  182. Exit Sub
  183. End If
  184. On Error GoTo 0
  185. ' Toggle the returned status
  186. If hn.LetterReturned = 1 Then
  187. hn.LetterReturned = 0
  188. hn.ReturnDate = #1/1/1970#
  189. Else
  190. hn.LetterReturned = 1
  191. hn.ReturnDate = Now()
  192. End If
  193. HouseholderNamesRepository.Update hn
  194. If hn.LetterReturned = 1 Then
  195. Flash().Success = "Marked as returned."
  196. Else
  197. Flash().Success = "Marked as not returned."
  198. End If
  199. Response.Redirect "/households/" & id
  200. End Sub
  201. '-------------------------------------------------------------------------------------------------------------------
  202. ' Create - Display form for new household
  203. '-------------------------------------------------------------------------------------------------------------------
  204. Public Sub Create()
  205. Set household = New POBO_Households
  206. ' Pre-fill territory if passed in query string
  207. If Request.QueryString("territory") <> "" And IsNumeric(Request.QueryString("territory")) Then
  208. household.TerritoryId = CInt(Request.QueryString("territory"))
  209. End If
  210. ' Load territories for dropdown
  211. Set territoriesList = TerritoriesRepository.GetAll(Empty)
  212. %> <!--#include file="../views/Household/create.asp" --> <%
  213. End Sub
  214. '-------------------------------------------------------------------------------------------------------------------
  215. ' Store - Save new household
  216. '-------------------------------------------------------------------------------------------------------------------
  217. Public Sub Store()
  218. Set household = New POBO_Households
  219. household.Address = Trim(Request.Form("Address"))
  220. household.StreetNumber = Request.Form("StreetNumber")
  221. household.StreetName = Trim(Request.Form("StreetName"))
  222. household.Latitude = Trim(Request.Form("Latitude"))
  223. household.Longitude = Trim(Request.Form("Longitude"))
  224. household.IsBusiness = IIf(Request.Form("IsBusiness") = "1", 1, 0)
  225. household.DoNotCall = IIf(Request.Form("DoNotCall") = "1", 1, 0)
  226. household.DoNotCallNotes = Trim(Request.Form("DoNotCallNotes"))
  227. household.DoNotCallPrivateNotes = Trim(Request.Form("DoNotCallPrivateNotes"))
  228. household.TerritoryId = Request.Form("TerritoryId")
  229. If Request.Form("DoNotCallDate") <> "" Then
  230. household.DoNotCallDate = CDate(Request.Form("DoNotCallDate"))
  231. ElseIf household.DoNotCall = 1 Then
  232. household.DoNotCallDate = Date()
  233. Else
  234. household.DoNotCallDate = Null
  235. End If
  236. ' Validation
  237. If household.Address = "" Then
  238. Flash().AddError "Address is required."
  239. Response.Redirect "/households/new"
  240. Exit Sub
  241. End If
  242. If Not IsNumeric(household.TerritoryId) Or CInt(household.TerritoryId) < 1 Then
  243. Flash().AddError "Please select a territory."
  244. Response.Redirect "/households/new"
  245. Exit Sub
  246. End If
  247. HouseholdsRepository.AddNew household
  248. Flash().Success = "Household created successfully."
  249. Response.Redirect "/households/" & household.Id
  250. End Sub
  251. '-------------------------------------------------------------------------------------------------------------------
  252. ' Edit - Display form to edit household
  253. '-------------------------------------------------------------------------------------------------------------------
  254. Public Sub Edit(id)
  255. On Error Resume Next
  256. Set household = HouseholdsRepository.FindByID(id)
  257. If Err.Number <> 0 Or household Is Nothing Then
  258. On Error GoTo 0
  259. Flash().AddError "Household not found."
  260. Response.Redirect "/households"
  261. Exit Sub
  262. End If
  263. On Error GoTo 0
  264. ' Load territories for dropdown
  265. Set territoriesList = TerritoriesRepository.GetAll(Empty)
  266. %> <!--#include file="../views/Household/edit.asp" --> <%
  267. End Sub
  268. '-------------------------------------------------------------------------------------------------------------------
  269. ' Update - Save changes to household
  270. '-------------------------------------------------------------------------------------------------------------------
  271. Public Sub Update(id)
  272. On Error Resume Next
  273. Set household = HouseholdsRepository.FindByID(id)
  274. If Err.Number <> 0 Or household Is Nothing Then
  275. On Error GoTo 0
  276. Flash().AddError "Household not found."
  277. Response.Redirect "/households"
  278. Exit Sub
  279. End If
  280. On Error GoTo 0
  281. household.Address = Trim(Request.Form("Address"))
  282. household.StreetNumber = Request.Form("StreetNumber")
  283. household.StreetName = Trim(Request.Form("StreetName"))
  284. household.Latitude = Trim(Request.Form("Latitude"))
  285. household.Longitude = Trim(Request.Form("Longitude"))
  286. household.IsBusiness = IIf(Request.Form("IsBusiness") = "1", 1, 0)
  287. household.DoNotCall = IIf(Request.Form("DoNotCall") = "1", 1, 0)
  288. household.DoNotCallNotes = Trim(Request.Form("DoNotCallNotes"))
  289. household.DoNotCallPrivateNotes = Trim(Request.Form("DoNotCallPrivateNotes"))
  290. household.TerritoryId = Request.Form("TerritoryId")
  291. If Request.Form("DoNotCallDate") <> "" Then
  292. household.DoNotCallDate = CDate(Request.Form("DoNotCallDate"))
  293. ElseIf household.DoNotCall = 1 Then
  294. If IsNull(household.DoNotCallDate) Then
  295. household.DoNotCallDate = Date()
  296. ElseIf Trim(CStr(household.DoNotCallDate)) = "" Then
  297. household.DoNotCallDate = Date()
  298. End If
  299. Else
  300. household.DoNotCallDate = Null
  301. End If
  302. ' Validation
  303. If household.Address = "" Then
  304. Flash().AddError "Address is required."
  305. Response.Redirect "/households/" & id & "/edit"
  306. Exit Sub
  307. End If
  308. HouseholdsRepository.Update household
  309. Flash().Success = "Household updated successfully."
  310. Response.Redirect "/households/" & id
  311. End Sub
  312. '-------------------------------------------------------------------------------------------------------------------
  313. ' Delete - Remove a household
  314. '-------------------------------------------------------------------------------------------------------------------
  315. Public Sub Delete(id)
  316. On Error Resume Next
  317. Set household = HouseholdsRepository.FindByID(id)
  318. If Err.Number <> 0 Or household Is Nothing Then
  319. On Error GoTo 0
  320. Flash().AddError "Household not found."
  321. Response.Redirect "/households"
  322. Exit Sub
  323. End If
  324. On Error GoTo 0
  325. HouseholdsRepository.Delete id
  326. Flash().Success = "Household deleted successfully."
  327. Response.Redirect "/households"
  328. End Sub
  329. Private Function BuildTerritoryNamesById(territories)
  330. Dim dict : Set dict = Server.CreateObject("Scripting.Dictionary")
  331. Dim iter, territory
  332. Set iter = territories.Iterator()
  333. Do While iter.HasNext()
  334. Set territory = iter.GetNext()
  335. dict(CStr(territory.Id)) = territory.Name & ""
  336. Loop
  337. Set BuildTerritoryNamesById = dict
  338. End Function
  339. End Class
  340. ' Singleton instance
  341. Dim HouseholdController_Class__Singleton
  342. Function HouseholdController()
  343. If IsEmpty(HouseholdController_Class__Singleton) Then
  344. Set HouseholdController_Class__Singleton = New HouseholdController_Class
  345. End If
  346. Set HouseholdController = HouseholdController_Class__Singleton
  347. End Function
  348. %>

Powered by TurnKey Linux.