Consolidated ASP Classic MVC framework from best components
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

398 lignes
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.