engineering contributions are in a much better, simpler place.

master
dtookey 4 years ago
parent accade8dff
commit 7be29424a9

@ -17,7 +17,7 @@ const (
projectEndpoint = "" projectEndpoint = ""
projectListEndpoint = "project/list?ids=" projectListEndpoint = "project/list?ids="
timeEntryForUserInRangeEndpoint = "time-entry/user-date-range?startDate=2020-01-01&endDate=%s&userId=%s" timeEntryForUserInRangeEndpoint = "time-entry/user-date-range?modelProperties=ActualHours,Date,Description,Project_Id,Task_Id,TimeSheet_Id,User_Id&startDate=2020-01-01&endDate=%s&userId=%s"
userEndpoint = "user/list-active?modelProperties=Id,FirstName,LastName,EmailAddress" userEndpoint = "user/list-active?modelProperties=Id,FirstName,LastName,EmailAddress"
) )
@ -79,22 +79,13 @@ type (
} }
TimeEntry struct { TimeEntry struct {
ActualHours float64 ActualHours float64
ActualHoursFormattedString string TimeEntryDate string `json:"Date,omitempty"`
ActualTimeString string TimeEntryDescription string `json:"Description,omitempty"`
ActualTotal float64 ProjectId string `json:"Project_Id,omitempty"`
BillableHours float64 TaskId string `json:"Task_Id,omitempty"`
BillableHoursFormattedString string TimeSheetId string `json:"TimeSheet_Id,omitempty"`
BillableTimeString string UserId string `json:"User_Id,omitempty"`
BillableTotal float64
TimeEntryDate string `json:"Date,omitempty"`
TimeEntryDescription string `json:"Description,omitempty"`
ProjectId string `json:"Project_Id,omitempty"`
RateBill float64
RateBurden float64
TaskId string `json:"Task_Id,omitempty"`
TimeSheetId string `json:"TimeSheet_Id,omitempty"`
UserId string `json:"User_Id,omitempty"`
} }
User struct { User struct {
@ -128,11 +119,21 @@ func (ic *Interconnect) UpdateUsers() {
func (ic *Interconnect) UpdateTimeEntries() { func (ic *Interconnect) UpdateTimeEntries() {
users := ic.DBConnector.FetchEngineerUsers() users := ic.DBConnector.FetchEngineerUsers()
entryChan := make(chan *[]*TimeEntry)
coroutineCount := 0
for _, userPtr := range *users { for _, userPtr := range *users {
user := *userPtr go ic.Client.GetTimeAllTimeEntriesForUserThroughDate(userPtr.Id, "2022-04-28", entryChan)
entries := ic.Client.GetTimeAllTimeEntriesForUserThroughDate(user.Id, "2022-04-28") coroutineCount++
}
log.Printf("Currently working goroutines: %d\n", coroutineCount)
for coroutineCount > 0 {
entries := <-entryChan
ic.DBConnector.UpdateTimeEntries(entries) ic.DBConnector.UpdateTimeEntries(entries)
coroutineCount--
log.Printf("Currently working goroutines: %d\n", coroutineCount)
} }
ic.DBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql")
} }
//</editor-fold> //</editor-fold>
@ -151,7 +152,7 @@ func NewIClient() *IClient {
return &c return &c
} }
func (iClient *IClient) GetTimeAllTimeEntriesForUserThroughDate(userId string, endDate string) *[]*TimeEntry { func (iClient *IClient) GetTimeAllTimeEntriesForUserThroughDate(userId string, endDate string, returnChan chan<- *[]*TimeEntry) {
urlString := fmt.Sprintf(timeEntryForUserInRangeEndpoint, endDate, userId) urlString := fmt.Sprintf(timeEntryForUserInRangeEndpoint, endDate, userId)
log.Println(urlString) log.Println(urlString)
req := iClient.createRequest(urlString, insightTokenFile) req := iClient.createRequest(urlString, insightTokenFile)
@ -161,7 +162,7 @@ func (iClient *IClient) GetTimeAllTimeEntriesForUserThroughDate(userId string, e
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
return &container returnChan <- &container
} }
func (iClient *IClient) GetProjectsInList(projectIds []string) *[]Project { func (iClient *IClient) GetProjectsInList(projectIds []string) *[]Project {

@ -44,18 +44,9 @@ func (c *DBConnector) UpdateTimeEntries(entries *[]*TimeEntry) {
} }
for _, ent := range *entries { for _, ent := range *entries {
_, err = s.Exec(ent.ActualHours, _, err = s.Exec(ent.ActualHours,
ent.ActualHoursFormattedString,
ent.ActualTimeString,
ent.ActualTotal,
ent.BillableHours,
ent.BillableHoursFormattedString,
ent.BillableTimeString,
ent.BillableTotal,
ent.TimeEntryDate, ent.TimeEntryDate,
ent.TimeEntryDescription, ent.TimeEntryDescription,
ent.ProjectId, ent.ProjectId,
ent.RateBill,
ent.RateBurden,
ent.TaskId, ent.TaskId,
ent.TimeSheetId, ent.TimeSheetId,
ent.UserId) ent.UserId)

@ -1,7 +1,6 @@
package main package main
import ( import (
"fmt"
"log" "log"
"mercury/src/insight" "mercury/src/insight"
"mercury/src/mercury" "mercury/src/mercury"
@ -12,6 +11,9 @@ import (
func main() { func main() {
s := time.Now() s := time.Now()
//icx := insight.NewInsightConnect()
//icx.DBConnector.ExecuteSqlScript("insight", "create-insight-contribution-table.sql")
//processQbBilling() //processQbBilling()
test() test()
//fetchInsightData() //fetchInsightData()
@ -36,20 +38,3 @@ func processQbBilling() {
mercury.ProcessTrialBalances(reportBase, "./test.csv") mercury.ProcessTrialBalances(reportBase, "./test.csv")
} }
func fetchInsightData() {
//jcrouch id = e779e0a9-0e56-4dbe-98dd-e8d0048d109f
//id := "e779e0a9-0e56-4dbe-98dd-e8d0048d109f"
client := insight.NewIClient()
users := client.GetUsers()
for _, user := range *users {
if user.EmailAddress == "jcrouch@jdsconsulting.net" {
fmt.Println(user.EmailAddress)
timeEntries := client.GetTimeAllTimeEntriesForUserThroughDate(user.Id, "2022-04-22")
for _, entry := range *timeEntries {
fmt.Printf("%#v\n", entry)
}
}
}
}

@ -0,0 +1,14 @@
DROP TABLE IF EXISTS insight_engineering_contributions;
CREATE TABLE insight_engineering_contributions AS
SELECT email,
CONCAT(insight.users.LastName, ', ', insight.users.FirstName) as Engineer,
ProjectId,
ActualHours,
TimeEntryDate,
TimeEntryDescription
FROM projects.users
INNER JOIN insight.users ON projects.users.email = insight.users.EmailAddress
INNER JOIN insight.timeentry ON insight.users.Id = insight.timeentry.UserId
WHERE projects.users.priv & POW(2, 25) > 0
;

@ -3,18 +3,9 @@ DROP TABLE IF EXISTS insight.timeentry;
CREATE TABLE insight.timeentry CREATE TABLE insight.timeentry
( (
ActualHours REAL, ActualHours REAL,
ActualHoursFormattedString varchar(30),
ActualTimeString VARCHAR(30),
ActualTotal REAL,
BillableHours REAL,
BillableHoursFormattedString VARCHAR(30),
BillableTimeString VARCHAR(30),
BillableTotal REAL,
TimeEntryDate VARCHAR(30), TimeEntryDate VARCHAR(30),
TimeEntryDescription VARCHAR(4096), TimeEntryDescription VARCHAR(4096),
ProjectId VARCHAR(50), ProjectId VARCHAR(50),
RateBill REAL,
RateBurden REAL,
TaskId VARCHAR(50), TaskId VARCHAR(50),
TimeSheetId VARCHAR(50), TimeSheetId VARCHAR(50),
UserId VARCHAR(50) UserId VARCHAR(50)

@ -1,17 +1,8 @@
INSERT INTO insight.timeentry (ActualHours, INSERT INTO insight.timeentry (ActualHours,
ActualHoursFormattedString,
ActualTimeString,
ActualTotal,
BillableHours,
BillableHoursFormattedString,
BillableTimeString,
BillableTotal,
TimeEntryDate, TimeEntryDate,
TimeEntryDescription, TimeEntryDescription,
ProjectId, ProjectId,
RateBill,
RateBurden,
TaskId, TaskId,
TimeSheetId, TimeSheetId,
UserId) UserId)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); VALUES (?, ?, ?, ?, ?, ?, ?);
Loading…
Cancel
Save