<% Option Explicit %> <% Class KitController Public Model Public Sub SwitchBoardIndex dim page_size : page_size = 10 dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) dim page_count, record_count set Model = new PagedIndex_ViewModel_Class Model.Title = "Tracking Kits" set Model.Kit = KitRepository.PagedIndexView(page_size, page_num, page_count, record_count) Model.CurrentPageNumber = page_num Model.PageSize = page_size Model.PageCount = page_count Model.RecordCount = record_count %> <% End Sub Public Sub SwitchBoardPurpleEnvelopsIndex dim page_size : page_size = 10 dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) dim page_count, record_count set Model = new SwitchBoard_PurpleEnvelopesViewModel_Class Model.Title = "Purple Envelope Kits" set Model.Kit = KitRepository.PagedPurpleEnvelopsIndexView(page_size, page_num, page_count, record_count) Model.CurrentPageNumber = page_num Model.PageSize = page_size Model.PageCount = page_count Model.RecordCount = record_count %> <% End Sub Public Sub SwitchBoardPurpleEnvelopeEditPost MVC.RequirePost HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) dim ID : ID = Request.Form("Id") dim model : set model = KitRepository.FindByID(ID) set model = Automapper.AutoMap(Request.Form, model) if Request.Form("InBoundTracking") = "on" Then model.InboundSTID = SettingsRepository.FindByName("Inbound STID") end if model.Status = "Ready to Assign Labels" 'model.Validate 'If model.Validator.HasErrors then FormCache.SerializeForm "EditKit", Request.Form ' Flash.Errors = model.Validator.Errors ' MVC.RedirectToActionExt "Edit", Array("Id",ID) 'Else KitRepository.Update model FormCache.ClearForm "EditKit" Flash.Success = "Kit updated." MVC.RedirectToAction "Index" 'End If End Sub Public Sub AssignKitColorPost MVC.RequirePost HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "ColorAssignForm", Request.Form("nonce"), "SwitchBoardPurpleEnvelopeEdit", Array("Id", Request.Form("Id")) dim ID : ID = Request.Form("Id") If Len(Request.Form("KitColorId")) > 0 AND Request.Form("KitColorId") <> "" Then InkjetRecordsRepository.UpdateColorForKit CLng(ID), CLng(Request.Form("KitColorId")) End If Flash.Success = "Color applied to all labels in kit." MVC.RedirectToActionExt "SwitchBoardPurpleEnvelopeEdit", Array("Id", ID) End Sub Public Sub AssignPrecinctColorsPost MVC.RequirePost HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "ColorAssignForm", Request.Form("nonce"), "SwitchBoardPurpleEnvelopeEdit", Array("Id", Request.Form("Id")) dim ID : ID = Request.Form("Id") dim key For Each key In Request.Form If Left(key, 14) = "PrecinctColor_" Then dim precinct : precinct = Mid(key, 15) dim colorId : colorId = Request.Form(key) If Len(colorId) > 0 AND colorId <> "" Then InkjetRecordsRepository.UpdateColorForPrecinct CLng(ID), precinct, CLng(colorId) End If End If Next Flash.Success = "Precinct colors saved." MVC.RedirectToActionExt "SwitchBoardPurpleEnvelopeEdit", Array("Id", ID) End Sub Public Sub SwitchBoardPurpleEnvelopeEdit dim id : id = Request.QueryString("Id") set Model = new SwitchBoard_ViewModel_Class set Model.Kit = KitRepository.SwitchBoardPurpleEnvelopeEditFindById(id) set Model.StidDropDown = SettingsRepository.GetStidDropDownRS() set Model.ColorsDropDown = ColorsRepository.GetColorsDropDownRS() set Model.Precincts = SortPrecinctColorRows(InkjetRecordsRepository.GetDistinctPrecinctsByKitId(id)) set Model.PrecinctBallotRanges = SortPrecinctBallotRangeRows(InkjetRecordsRepository.GetPrecinctBallotRangesByKitId(id)) On Error Resume Next Model.PurpleEnvelopeElectionLabel = FormatPurpleEnvelopeElectionLabel(SettingsRepository.FindByName("Electiondate")) If Err.Number <> 0 Then Model.PurpleEnvelopeElectionLabel = "" Err.Clear End If On Error GoTo 0 Model.Title = "Purple Envelopes for " HTMLSecurity.SetAntiCSRFToken "KitEditForm" HTMLSecurity.SetAntiCSRFToken "ColorAssignForm" %> <% End Sub Private Function FormatPurpleEnvelopeElectionLabel(ByVal rawValue) FormatPurpleEnvelopeElectionLabel = Trim(rawValue & "") If Len(FormatPurpleEnvelopeElectionLabel) = 0 Then Exit Function On Error Resume Next dim parsedDate : parsedDate = CDate(rawValue) If Err.Number = 0 Then FormatPurpleEnvelopeElectionLabel = MonthName(Month(parsedDate), True) & "-" & CStr(Year(parsedDate)) Else Err.Clear End If On Error GoTo 0 End Function Private Function SortPrecinctColorRows(ByVal rs) dim list : set list = new LinkedList_Class If rs.EOF Then set SortPrecinctColorRows = list Exit Function End If dim items() dim itemCount : itemCount = -1 Do Until rs.EOF itemCount = itemCount + 1 ReDim Preserve items(itemCount) dim row : set row = new PrecinctColorRow_ViewModel_Class row.PRECINCT = rs("PRECINCT") If IsNull(rs("ColorId")) Then row.ColorId = "" Else row.ColorId = rs("ColorId") End If Set items(itemCount) = row rs.MoveNext Loop SortPrecinctItems items dim i For i = 0 To UBound(items) list.Push items(i) Next set SortPrecinctColorRows = list End Function Private Function SortPrecinctBallotRangeRows(ByVal rs) dim list : set list = new LinkedList_Class If rs.EOF Then set SortPrecinctBallotRangeRows = list Exit Function End If dim items() dim itemCount : itemCount = -1 Do Until rs.EOF itemCount = itemCount + 1 ReDim Preserve items(itemCount) dim row : set row = new PrecinctBallotRangeRow_ViewModel_Class row.PRECINCT = rs("PRECINCT") row.LowBallotNumber = rs("LowBallotNumber") row.HighBallotNumber = rs("HighBallotNumber") Set items(itemCount) = row rs.MoveNext Loop SortPrecinctItems items dim i For i = 0 To UBound(items) list.Push items(i) Next set SortPrecinctBallotRangeRows = list End Function Private Sub SortPrecinctItems(ByRef items) If Not IsArray(items) Then Exit Sub dim i, j For i = 0 To UBound(items) - 1 For j = i + 1 To UBound(items) If PrecinctSortsBefore(items(j).PRECINCT, items(i).PRECINCT) Then dim temp : set temp = items(i) Set items(i) = items(j) Set items(j) = temp End If Next Next End Sub Private Function PrecinctSortsBefore(ByVal leftPrecinct, ByVal rightPrecinct) dim leftType, leftNumber, leftSuffix, leftNormalized dim rightType, rightNumber, rightSuffix, rightNormalized ParsePrecinctSortParts leftPrecinct, leftType, leftNumber, leftSuffix, leftNormalized ParsePrecinctSortParts rightPrecinct, rightType, rightNumber, rightSuffix, rightNormalized If leftType <> rightType Then PrecinctSortsBefore = (leftType < rightType) Exit Function End If If leftType = 0 Then If leftNumber <> rightNumber Then PrecinctSortsBefore = (leftNumber < rightNumber) Exit Function End If If leftSuffix <> rightSuffix Then PrecinctSortsBefore = (leftSuffix < rightSuffix) Exit Function End If End If If leftNormalized <> rightNormalized Then PrecinctSortsBefore = (leftNormalized < rightNormalized) Else PrecinctSortsBefore = (UCase(Trim(leftPrecinct & "")) < UCase(Trim(rightPrecinct & ""))) End If End Function Private Sub ParsePrecinctSortParts(ByVal precinct, ByRef precinctType, ByRef numericPart, ByRef suffixPart, ByRef normalizedText) dim rawPrecinct : rawPrecinct = Trim(precinct & "") dim leadingDigits : leadingDigits = "" dim i, currentChar For i = 1 To Len(rawPrecinct) currentChar = Mid(rawPrecinct, i, 1) If currentChar >= "0" And currentChar <= "9" Then leadingDigits = leadingDigits & currentChar Else Exit For End If Next If Len(leadingDigits) > 0 Then precinctType = 0 numericPart = CLng(leadingDigits) suffixPart = UCase(Trim(Mid(rawPrecinct, Len(leadingDigits) + 1))) normalizedText = CStr(numericPart) & "|" & suffixPart Else precinctType = 1 numericPart = 0 suffixPart = UCase(rawPrecinct) normalizedText = suffixPart End If End Sub Public Sub Index dim page_size : page_size = 10 dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) dim page_count, record_count set Model = new PagedIndex_ViewModel_Class Model.Title = "Tracking Kits" set Model.Kit = KitRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count) Model.CurrentPageNumber = page_num Model.PageSize = page_size Model.PageCount = page_count Model.RecordCount = record_count %> <% End Sub Public Sub Search dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) dim page_size : page_size = 10 dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) dim page_count, record_count set Model = new PagedIndex_ViewModel_Class Model.Title = "Kit" set Model.Kit = KitRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","JobNumber","%" & searchValue & "%","Jcode","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count) Model.CurrentPageNumber = page_num Model.PageSize = page_size Model.PageCount = page_count Model.RecordCount = record_count %> <% End Sub Public Sub SwitchBoardEdit Flash.ShowSuccessIfPresent dim id : id = Request.QueryString("Id") set Model = new SwitchBoard_ViewModel_Class set Model.Kit = KitRepository.SwitchBoardEditFindById(id) set Model.Labels = KitLabelsRepository.Find(Array("KitId =?",id),empty) Model.Title = "Kit for " HTMLSecurity.SetAntiCSRFToken "KitEditForm" %> <% End Sub Public Sub ExportTrackingLabels(id) dim KitInfo : Set KitInfo = KitRepository.FindByID(id) dim JurisdictionInfo : Set JurisdictionInfo = JurisdictionRepository.FindByJCode(KitInfo.Jcode) ReportManager.Filename = Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\Label_Report.rep" if dev = true Then ReportManager.SetDatabaseConnectionString "TRACKINGKITLABELS","Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\webdata - Copy.mdb;" else ReportManager.SetDatabaseConnectionString "TRACKINGKITLABELS","Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=C:\inetpub\Data\webdata - Copy.mdb;" End If ReportManager.Preview = false ReportManager.ShowProgress = false ReportManager.ShowPrintDialog = false ReportManager.SetParamValue "PBKITID", CInt(id) if FSO.FolderExists(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name) = False then FSO.CreateFolder(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name) end if if FSO.FileExists(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_labels.pdf") then FSO.DeleteFile(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_labels.pdf") end if ReportManager.SaveToPdf Request.ServerVariables("APPL_PHYSICAL_PATH") & "\Data\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & " Labels.pdf",1 FSO.MoveFile Request.ServerVariables("APPL_PHYSICAL_PATH") & "\Data\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & " Labels.pdf" , ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_labels.pdf" End Sub Public Sub ExportSnailWorksTracking(id) dim KitInfo : Set KitInfo = KitRepository.FindByID(id) dim JurisdictionInfo : Set JurisdictionInfo = JurisdictionRepository.FindByJCode(KitInfo.Jcode) if FSO.FolderExists(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name) = False then FSO.CreateFolder(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name) end if if FSO.FileExists(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_SW_EXPORT.csv") then FSO.DeleteFile(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_SW_EXPORT.csv") end if dim export: set export = SnailWorksRepository.GetSnailWorksExportById(id) if export.DetailRecords.Count > 0 Then dim objExportFile: Set objExportFile = FSO.CreateTextFile(ExportDirectory & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "\" & JurisdictionInfo.JCode & "-" & JurisdictionInfo.Name & "_SW_EXPORT.csv",2) With objExportFile .Write """" & export.Header.RecordType & """," .Write """" & export.Header.Version & """," .Write """" & export.Header.UserId & """," .Write """" & export.Header.ClientName & """," .Write """" & export.Header.ParentClientName & """," .Write """" & export.Header.JobName & """," .Write """" & export.Header.JobDescription & """," .Write """" & export.Header.SplitName & """," .Write """" & export.Header.SplitDescription & """," .Write """" & export.Header.PieceType & """," .Write """" & export.Header.MailDate & """," .Write """" & export.Header.UploadType & """," .Write """" & export.Header.TrackedQuanity & """," .Write """" & export.Header.PiecesMailed & """," .Write """" & export.Header.TargetInHomeDateStart & """," .Write """" & export.Header.TargetInHomeDateEnd & """," .Write """" & export.Header.ConfirmationEmail & """," .Write """" & export.Header.JobId & """," .Write """" & export.Header.SplitId & """," .Write """" & export.Header.TypeOfTracking & """," .Write """" & export.Header.ReturnedPostalRoutingCode & """," .Write """" & export.Header.ReportId1 & """," .Write """" & export.Header.Report1Email & """," .Write """" & export.Header.ReportId2 & """," .Write """" & export.Header.Report2Email & """," .Write """" & export.Header.INFOONLY & """" .Write vbCrLf dim it:set it = export.DetailRecords.Iterator dim records while it.HasNext set records = it.GetNext() .Write """" & records.RecordType & """," .Write """" & records.CustomerUniqueIdentifier & """," .Write """" & records.IMB & """," .Write """" & records.Greeting & """," .Write """" & records.FirstName & """," .Write """" & records.MI & """," .Write """" & records.LastName & """," .Write """" & records.Suffix & """," .Write """" & records.FullName & """," .Write """" & records.Company & """," .Write """" & records.Title & """," .Write """" & records.Address1 & """," .Write """" & records.Address2 & """," .Write """" & records.City & """," .Write """" & records.State & """," .Write """" & records.Zip & """," .Write """" & records.UserDefined1 & """," .Write """" & records.UserDefined2 & """," .Write """" & records.UserDefined3 & """," .Write """" & records.UserDefinedIdentifier4 & """," .Write """" & records.UserDefinedIdentifier5 & """," .Write """" & records.SeedIndicator & """," .Write """" & records.InductionPoint & """," .Write """" & records.InductionDate & """," .Write """" & records.InBoundIMB & """," .Write """" & records.IMCB & """," .Write """" & records.IMTB & """" & vbCRLF Wend End With End If End Sub Public Sub Edit dim id : id = Request.QueryString("Id") set Model = new Edit_ViewModel_Class set Model.Kit = KitRepository.FindByID(id) Model.Title = "Edit Kit" HTMLSecurity.SetAntiCSRFToken "KitEditForm" %> <% Flash.Success = "Kit Updated." End Sub Public Sub EditPost MVC.RequirePost HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) dim ID : ID = Request.Form("Id") dim originalModel : set originalModel = KitRepository.FindByID(ID) dim model : set model = KitRepository.FindByID(ID) set model = Automapper.AutoMap(Request.Form, model) ' Handle date fields - if empty string, preserve original value or set to Null If Len(Trim(model.CreatedOn & "")) = 0 Then model.CreatedOn = originalModel.CreatedOn End If If Len(Trim(model.LabelsPrinted & "")) = 0 Then model.LabelsPrinted = Null End If If Len(Trim(model.ExportedToSnailWorks & "")) = 0 Then model.ExportedToSnailWorks = Null End If ' Handle boolean/numeric fields - convert "True"/"False" strings to proper numeric values If UCase(Trim(model.InkJetJob & "")) = "TRUE" Then model.InkJetJob = -1 ElseIf UCase(Trim(model.InkJetJob & "")) = "FALSE" Then model.InkJetJob = 0 ElseIf Len(Trim(model.InkJetJob & "")) = 0 Then model.InkJetJob = 0 End If If UCase(Trim(model.Cass & "")) = "TRUE" Then model.Cass = -1 ElseIf UCase(Trim(model.Cass & "")) = "FALSE" Then model.Cass = 0 ElseIf Len(Trim(model.Cass & "")) = 0 Then model.Cass = 0 End If ' Handle numeric fields - if empty string, set to 0 or Null If Len(Trim(model.OfficeCopiesAmount & "")) = 0 Then model.OfficeCopiesAmount = 0 End If ' Handle STID fields - if empty string, set to Null If Len(Trim(model.OutboundSTID & "")) = 0 Then model.OutboundSTID = Null End If If Len(Trim(model.InboundSTID & "")) = 0 Then model.InboundSTID = Null End If 'model.Validate 'If model.Validator.HasErrors then FormCache.SerializeForm "EditKit", Request.Form ' Flash.Errors = model.Validator.Errors ' MVC.RedirectToActionExt "Edit", Array("Id",ID) 'Else KitRepository.Update model FormCache.ClearForm "EditKit" Flash.Success = "Kit updated." MVC.RedirectToAction "Index" 'End If End Sub Public Sub CreateTrackingKit dim form_params : set form_params = FormCache.DeserializeForm("NewKit") dim ID : ID = Request.QueryString("Id") dim model : set model = new Create_ViewModel_Class model.Title = "Create Kit " model.JCode = ID dim ugh : set ugh = JurisdictionRepository.Find(Array("[JCode] = ?",ID),empty) set model.Jurisdiction = ugh.pop() 'If Not form_params Is Nothing then ' set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) 'Else ' set Model = new Create_ViewModel_Class 'End If HTMLSecurity.SetAntiCSRFToken "KitCreateForm" %> <% End Sub Public Sub Create dim form_params : set form_params = FormCache.DeserializeForm("NewKit") dim ID : ID = Request.QueryString("Id") dim model : set model = new Create_ViewModel_Class model.Title = "Create Kit " model.JCode = ID dim ugh : set ugh = JurisdictionRepository.Find(Array("[JCode] = ?",ID),empty) set model.Jurisdiction = ugh.pop() 'If Not form_params Is Nothing then ' set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) 'Else ' set Model = new Create_ViewModel_Class 'End If HTMLSecurity.SetAntiCSRFToken "KitCreateForm" %> <% End Sub Public Sub CreatePost MVC.RequirePost HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitCreateForm", Request.Form("nonce"), "Create" dim new_Kit_model : set new_Kit_model = Automapper.AutoMap(Request.Form, new KitModel_Class) 'new_Kit_model.Validator.Validate 'If new_Kit_model.Validator.HasErrors then ' FormCache.SerializeForm "NewKit", Request.Form ' Flash.Errors = new_Kit_model.Validator.Errors ' MVC.RedirectToAction "Create" 'Else KitRepository.AddNew new_Kit_model KitLabelsRepository.BulkAdd new_Kit_model.ID,Request.Form("Amount") ' FormCache.ClearForm "NewKit" ExportTrackingLabels(new_Kit_model.ID) ExportSnailWorksTracking(new_Kit_model.ID) Flash.Success = "Kit added." MVC.RedirectToAction "Index" 'End If End Sub Public Sub CreateTrackingKitPost MVC.RequirePost HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitCreateForm", Request.Form("nonce"), "Create" dim new_Kit_model : set new_Kit_model = Automapper.AutoMap(Request.Form, new KitModel_Class) 'new_Kit_model.Validator.Validate 'If new_Kit_model.Validator.HasErrors then ' FormCache.SerializeForm "NewKit", Request.Form ' Flash.Errors = new_Kit_model.Validator.Errors ' MVC.RedirectToAction "Create" 'Else KitRepository.AddNew new_Kit_model KitLabelsRepository.BulkAdd new_Kit_model.ID,Request.Form("Amount") ' FormCache.ClearForm "NewKit" Flash.Success = "Kit added." MVC.RedirectToAction "Index" 'End If End Sub Public Sub Delete dim id : id = Request.QueryString("Id") set Model = new Delete_ViewModel_Class set Model.Kit = KitRepository.FindByID(id) Model.Title = "Delete Kit" HTMLSecurity.SetAntiCSRFToken "KitDeleteForm" %> <% End Sub Public Sub DeletePost MVC.RequirePost HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitDeleteForm", Request.Form("nonce"), "Create" dim id : id = Request.Form("Id") KitRepository.Delete id Flash.Success = "Kit deleted." MVC.RedirectToAction "Index" End Sub End Class MVC.Dispatch %>