|
- <%
- '=======================================================================================================================
- ' INDUSTRY REPOSITORY
- '=======================================================================================================================
- Class IndustryRepository_Class
-
- ' All industries with the number of businesses in each: list of Dictionary(id, name, n)
- Public Function All()
- Dim list, rs, d
- Set list = CreateObject("Scripting.Dictionary")
- Set rs = Db_Query("SELECT i.id, i.name, COUNT(b.id) AS n FROM industries i LEFT JOIN businesses b ON b.industry_id = i.id GROUP BY i.id, i.name ORDER BY i.name", Array())
- Do While Not rs.EOF
- Set d = CreateObject("Scripting.Dictionary")
- d("id") = CLng(rs(0)) : d("name") = rs(1) & "" : d("n") = CLng(rs(2))
- list.Add list.Count, d
- rs.MoveNext
- Loop
- rs.Close
- Set All = list
- End Function
-
- Public Function UncategorizedCount()
- Dim rs
- Set rs = Db_Query("SELECT COUNT(*) FROM businesses WHERE industry_id IS NULL", Array())
- UncategorizedCount = CLng(rs(0))
- rs.Close
- End Function
-
- Public Function Find(id)
- Dim rs
- Set rs = Db_Query("SELECT i.id, i.name, (SELECT COUNT(*) FROM businesses b WHERE b.industry_id = i.id) AS n FROM industries i WHERE i.id = ?", Array(Db_PI(id)))
- If rs.EOF Then
- Set Find = Nothing
- Else
- Dim d : Set d = CreateObject("Scripting.Dictionary")
- d("id") = CLng(rs(0)) : d("name") = rs(1) & "" : d("n") = CLng(rs(2))
- Set Find = d
- End If
- rs.Close
- End Function
-
- ' True when another industry (not excludeId) already has this name (case-insensitive).
- Public Function NameTaken(name, excludeId)
- Dim rs
- Set rs = Db_Query("SELECT COUNT(*) FROM industries WHERE name = ? AND id <> ?", Array(Db_PS(name), Db_PI(excludeId)))
- NameTaken = (CLng(rs(0)) > 0)
- rs.Close
- End Function
-
- Public Sub Create(name)
- Db_Exec "INSERT INTO industries (name) VALUES (?)", Array(Db_PS(name))
- End Sub
-
- Public Sub Rename(id, name)
- Db_Exec "UPDATE industries SET name = ? WHERE id = ?", Array(Db_PS(name), Db_PI(id))
- End Sub
-
- ' Moves every business from sourceId to targetId, then deletes sourceId. Returns the number of businesses moved.
- Public Function Merge(sourceId, targetId)
- Dim conn, moved, rs, msg
- Set conn = DAL().Connection
- Set rs = Db_Query("SELECT COUNT(*) FROM businesses WHERE industry_id = ?", Array(Db_PI(sourceId)))
- moved = CLng(rs(0))
- rs.Close
-
- conn.BeginTrans
- On Error Resume Next
- Db_Exec "UPDATE businesses SET industry_id = ? WHERE industry_id = ?", Array(Db_PI(targetId), Db_PI(sourceId))
- If Err.Number = 0 Then Db_Exec "DELETE FROM industries WHERE id = ?", Array(Db_PI(sourceId))
- If Err.Number <> 0 Then
- msg = Err.Description
- Err.Clear
- conn.RollbackTrans
- On Error GoTo 0
- Err.Raise 5, "IndustryRepository.Merge", msg
- End If
- conn.CommitTrans
- On Error GoTo 0
- Merge = moved
- End Function
-
- Public Sub Delete(id)
- Db_Exec "DELETE FROM industries WHERE id = ?", Array(Db_PI(id))
- End Sub
- End Class
-
- Dim IndustryRepository_Class__Singleton
- Function IndustryRepository()
- If IsEmpty(IndustryRepository_Class__Singleton) Then
- Set IndustryRepository_Class__Singleton = New IndustryRepository_Class
- End If
- Set IndustryRepository = IndustryRepository_Class__Singleton
- End Function
- %>
|