package main
import (
"database/sql"
"log"
"net/http"
"text/template"
_ "github.com/go-sql-driver/mysql"
)
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
func dbConn() (db *sql.DB) {
dbDriver := "mysql"
dbUser := "root"
dbPass := "1"
dbName := "report_m"
db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)
if err != nil {
panic(err.Error())
}
return db
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
var tmpl1 = template.Must(template.ParseGlob("report/*"))
func Index(w http.ResponseWriter, r *http.Request) {
tmpl1.ExecuteTemplate(w, "Index", nil)
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
var tmpl2 = template.Must(template.ParseGlob("report/*"))
func IndexReport(w http.ResponseWriter, r *http.Request) {
tmpl2.ExecuteTemplate(w, "IndexReport", nil)
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
type Month struct {
Mname string
Color string
Id int
}
type Year struct {
Yname, Color string
Selected bool
}
type Data struct {
Years []*Year
Months []*Month
}
var tmpl3 = template.Must(template.ParseGlob("report/*"))
func ShowMonth(w http.ResponseWriter, r *http.Request) {
db := dbConn()
///////////////////////////////////////////////////////////////////////////
if r.Method == "POST" {
years := r.FormValue("years")
selDB, err := db.Query("SELECT MONTHNAME(Rdate) as months, color, report_monthly_id as id FROM report_monthly WHERE YEAR(Rdate)=?", years )
if err != nil {
panic(err.Error())
}
resm := []Month{}
for selDB.Next() {
var months, color string
var id int
err = selDB.Scan(&months, &color, &id)
if err != nil {
panic(err.Error())
}
rep := Month{Mname: months, Color: color, Id: id}
resm = append(resm, rep)
}
///////////////////////////////////////////////////////////////////////////
selDB1, err := db.Query("SELECT DISTINCT YEAR(Rdate) as years, color FROM report_monthly ORDER BY report_monthly_id DESC")
if err != nil {
panic(err.Error())
}
res := []Year{}
for selDB1.Next() {
var years, color string
err = selDB1.Scan(&years, &color)
if err != nil {
panic(err.Error())
}
rep := Year{Yname: years, Color: color}
res = append(res, rep)
}
// person := Data{Years: []*Year{&res},
// Months: []*Month{&resm}}
log.Println(resm)
log.Println(res)
tmpl3.ExecuteTemplate(w, "IndexReport", resm)
defer db.Close()
}
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
type Report struct {
Report_monthly_id int
Rdate_numeration int
Save bool
Submit bool
Approve bool
Rdate string
Client_id int
Color string
}
var tmpl4 = template.Must(template.ParseGlob("report/*"))
func LoadReport(w http.ResponseWriter, r *http.Request) {
db := dbConn()
nId := r.URL.Query().Get("id")
selDB, err := db.Query("SELECT color, report_monthly_id, save, submit, approve, rdate, client_id, rdate_numeration FROM report_monthly WHERE report_monthly_id=?", nId)
if err != nil {
panic(err.Error())
}
rep := Report{}
res := []Report{}
for selDB.Next() {
var report_monthly_id, rdate_numeration, client_id int
var save, submit, approve bool
var rdate, color string
err = selDB.Scan(&color, &report_monthly_id, &save, &submit, &approve, &rdate, &client_id, &rdate_numeration)
if err != nil {
panic(err.Error())
}
rep.Report_monthly_id = report_monthly_id
rep.Save = save
rep.Submit = submit
rep.Approve = approve
rep.Rdate = rdate
rep.Client_id = client_id
rep.Rdate_numeration = rdate_numeration
rep.Color = color
res = append(res, rep)
}
log.Println(rep)
tmpl4.ExecuteTemplate(w, "Index", res)
defer db.Close()
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
func UpdateReport(w http.ResponseWriter, r *http.Request) {
db := dbConn()
if r.Method == "POST" {
color := r.FormValue("color")
id := r.FormValue("id")
insForm, err := db.Prepare("UPDATE report_monthly SET color=? WHERE report_monthly_id=?")
if err != nil {
panic(err.Error())
}
insForm.Exec(color, id)
log.Println("UPDATE: Color: " + color + " | Id: " + id)
}
defer db.Close()
http.Redirect(w, r, "/", 301)
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
func main() {
log.Println("Server started on: http://localhost:8080")
//REPORTS
http.HandleFunc("/", Index)
http.HandleFunc("/indexreport", IndexReport)
http.HandleFunc("/showmonth", ShowMonth)
http.HandleFunc("/loadreport", LoadReport)
http.HandleFunc("/updatereport", UpdateReport)
//STATIC FILES
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
//LISTEN ON-SERVE:
http.ListenAndServe(":8080", nil)
}
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////