package main import ( "os" "os/exec" //"github.com/atotto/encoding/csv" "fmt" "time" "bufio" "strconv" "encoding/csv" ) const ( timeform string = "2006-01-02 15:04" taskfile string = "/tmp/laboravi.export.tasks" custfile string = "/tmp/laboravi.export.customers" projfile string = "/tmp/laboravi.export.projects" //taskfile string = "laboravi.export.tasks" //custfile string = "laboravi.export.customers" //projfile string = "laboravi.export.projects" ) func ExportTasks(in []Task) { filename := taskfile file ,err := os.Create(filename) checkErr(err) defer file.Close() w := csv.NewWriter(file) defer w.Flush() for _,i := range in { //str := []string{Sint(i.Id),Sint(i.Projectid),i.Start.Format(time.RFC3339),i.Stop.Format(time.RFC3339),i.Taskname,i.Comment,Sint(i.Checkout)} str := []string{Sint(i.Id),Sint(i.Projectid),i.Start.Format(timeform),i.Stop.Format(timeform),i.Taskname,i.Comment,Sint(i.Checkout)} w.Write(str) //w.WriteStruct(i) } } func ExportProjects(in []Project) { filename := projfile file ,err := os.Create(filename) checkErr(err) defer file.Close() w := csv.NewWriter(file) defer w.Flush() for _,i := range in { //str := []string{Sint(i.Id),i.Name,i.Comment,i.First.Format(time.RFC3339),i.Last.Format(time.RFC3339),Sint(i.Finished),Sint(i.Customer)} str := []string{Sint(i.Id),i.Name,i.Comment,i.First.Format(timeform),i.Last.Format(timeform),Sint(i.Finished),Sint(i.Customer)} w.Write(str) //w.Write([]string{" Fuck","Master","Flash"}) //w.WriteStruct(i) } } func ExportCustomers(in []Customer) { filename := custfile file ,err := os.Create(filename) checkErr(err) defer file.Close() w := csv.NewWriter(file) defer w.Flush() for _,i := range in { //str := []string{Sint(i.Id),i.Company,i.Name,i.Address,Sflo(i.Satz),i.Lastbill.Format(time.RFC3339)} str := []string{Sint(i.Id),i.Company,i.Name,i.Address,Sflo(i.Satz),i.Lastbill.Format(timeform)} w.Write(str) //w.WriteStruct(i) } } // Import an array of Tasks from a csv of given filename func ImportTasks() ([]Task) { filename := taskfile //file ,err := os.Create(filename) var tsk []Task //w := NewReader(strings.NewReader()) f, _ := os.Open(filename) // Create a new reader. r := csv.NewReader(bufio.NewReader(f)) //err := r.ReadStructAll(&cust) //checkErr(err) lines, err := r.ReadAll() checkErr(err) for _, line := range lines { id, err := strconv.Atoi(line[0]) checkErr(err) pr, err := strconv.Atoi(line[1]) checkErr(err) sta,err := time.Parse(timeform,line[2]) checkErr(err) sto,err := time.Parse(timeform,line[3]) checkErr(err) ch, err := strconv.Atoi(line[6]) checkErr(err) data := Task{ Id: id, Projectid: pr, Start: sta, Stop: sto, Taskname: line[4], Comment: line[5], Checkout: ch, } tsk=append(tsk,data) } return tsk } // Import an array of Customers from a csv of given filename func ImportCustomers() ([]Customer) { filename := custfile //file ,err := os.Create(filename) var cust []Customer //w := NewReader(strings.NewReader()) f, _ := os.Open(filename) // Create a new reader. r := csv.NewReader(bufio.NewReader(f)) //err := r.ReadStructAll(&cust) //checkErr(err) lines, err := r.ReadAll() checkErr(err) for _, line := range lines { id, err := strconv.Atoi(line[0]) checkErr(err) sat,err := strconv.ParseFloat(line[4],64) checkErr(err) tim,err := time.Parse(timeform,line[5]) checkErr(err) data := Customer{ Id: id, Company: line[1], Name: line[2], Address: line[3], Satz: sat, Lastbill: tim, } cust=append(cust,data) } return cust } // Import an array of Projects from a csv of given filename func ImportProjects() (prjs []Project) { filename := projfile //file ,err := os.Create(filename) //w := NewReader(strings.NewReader()) f, _ := os.Open(filename) // Create a new reader. r := csv.NewReader(bufio.NewReader(f)) //err := r.ReadStructAll(&cust) //checkErr(err) lines, err := r.ReadAll() checkErr(err) for _, line := range lines { id, err := strconv.Atoi(line[0]) checkErr(err) fir,err := time.Parse(timeform,line[3]) checkErr(err) las,err := time.Parse(timeform,line[4]) checkErr(err) fin,err := strconv.Atoi(line[5]) checkErr(err) cu,err := strconv.Atoi(line[6]) checkErr(err) data := Project{ Id: id, Name: line[1], Comment: line[2], First: fir, Last: las, Finished: fin, Customer: cu, } prjs=append(prjs,data) } return } func TarExports(filename string) { var ( cmdOut []byte err error ) cmd := "tar" fln := fmt.Sprintf("/tmp/%s",filename) //args := []string{"-cf",filename,"/tmp/laboravi.export.tasks","/tmp/laboravi.export.customers","/tmp/laboravi.export.projects"} args := []string{"-cf",fln,taskfile,projfile,custfile} if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil { //panic(err) } _ = cmdOut cmd = "mv" args = []string{fln,"."} if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil { //panic(err) } _ = cmdOut } func UnTarExports(filename string) { var ( cmdOut []byte err error ) cmd := "tar" //args := []string{"-xf",filename,"/tmp/laboravi.export.tasks","/tmp/laboravi.export.customers","/tmp/laboravi.export.projects"} //args := []string{"-xf",filename,taskfile,projfile,custfile} args := []string{"-xf",filename,"-C","/"} if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil { //panic(err) } _ = cmdOut } func PurgeTemps() { var ( cmdOut []byte err error ) cmd := "rm" //args := []string{"/tmp/laboravi.export.tasks","/tmp/laboravi.export.customers","/tmp/laboravi.export.projects"} args := []string{taskfile,projfile,custfile} //args := []string{"/tmp/laboravi.export.*"} if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil { //panic(err) } _ = cmdOut }