PageRenderTime 81ms CodeModel.GetById 28ms RepoModel.GetById 6ms app.codeStats 1ms

/src/server/server.go

https://bitbucket.org/nmpatzios/cachier
Go | 1137 lines | 884 code | 219 blank | 34 comment | 100 complexity | 31fdb634405020dbfc24ee00f5d6b35c MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, Apache-2.0
  1. package main
  2. import (
  3. "bookings"
  4. "cancellation"
  5. "customers"
  6. "expenses"
  7. "fmt"
  8. tr "gettext"
  9. "html/template"
  10. "income"
  11. "log"
  12. "mysqldb"
  13. "net/http"
  14. "os"
  15. "pendaingdays"
  16. "promotions"
  17. "resportssales"
  18. "revenueexpenses"
  19. "storesettings"
  20. "strconv"
  21. "time"
  22. "github.com/gorilla/mux"
  23. )
  24. var templateCache = map[string]*template.Template{}
  25. var templateFuncMap = template.FuncMap{
  26. "safehtml": safeHTML,
  27. "touppercase": CompanyNameToUpperCase,
  28. "gettext": tr.Translate,
  29. "add": add,
  30. }
  31. var c mysqldb.Conf
  32. func init() {
  33. c.GetConf()
  34. }
  35. func CacheMiddleware(h http.Handler, duration time.Duration) http.Handler {
  36. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  37. w.Header().Set("Cache-Control", fmt.Sprintf("public, max-age=%d", int(duration.Seconds())))
  38. w.Header().Set("Expires", time.Now().Add(duration).Format(http.TimeFormat))
  39. h.ServeHTTP(w, r)
  40. })
  41. }
  42. func renderView(viewName string, w http.ResponseWriter, data interface{}) {
  43. if tmpl, ok := templateCache[viewName]; ok {
  44. tmpl.Execute(w, data)
  45. return
  46. }
  47. tmpl, err := template.New("base.html").Funcs(templateFuncMap).ParseFiles("views/base.html", "views/"+viewName)
  48. if err != nil {
  49. log.Fatalf("Error parsing templates %s: %v", viewName, err.Error())
  50. }
  51. templateCache[viewName] = tmpl
  52. err = tmpl.Execute(w, data)
  53. if err != nil {
  54. println(err.Error())
  55. }
  56. }
  57. func safeHTML(html string) template.HTML {
  58. return template.HTML(html)
  59. }
  60. func renderSubscriptionPage(w http.ResponseWriter, r *http.Request) {
  61. langParam := r.URL.Query().Get("lang")
  62. pathtolocale := os.Getenv("LOCALE_LANG")
  63. tr.Setup(langParam, langParam, pathtolocale)
  64. tr.ChangeLocale(langParam)
  65. context := GetSubscription()
  66. username := getUserName(r)
  67. vatNumber := getVatNumberSession(r)
  68. if vatNumber != "" {
  69. context.VatNumber = vatNumber
  70. }
  71. user := QueryUser(username)
  72. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  73. context.ImageName = user.ID
  74. renderView("subscription.html", w, context)
  75. }
  76. func renderBillingPage(w http.ResponseWriter, r *http.Request) {
  77. langParam := r.URL.Query().Get("lang")
  78. pathtolocale := os.Getenv("LOCALE_LANG")
  79. tr.Setup(langParam, langParam, pathtolocale)
  80. tr.ChangeLocale(langParam)
  81. context := GetBilling()
  82. username := getUserName(r)
  83. vatNumber := getVatNumberSession(r)
  84. if vatNumber != "" {
  85. context.VatNumber = vatNumber
  86. }
  87. user := QueryUser(username)
  88. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  89. context.ImageName = user.ID
  90. renderView("billing-history.html", w, context)
  91. }
  92. func renderCustomersPage(w http.ResponseWriter, r *http.Request) {
  93. langParam := r.URL.Query().Get("lang")
  94. pathtolocale := os.Getenv("LOCALE_LANG")
  95. tr.Setup(langParam, langParam, pathtolocale)
  96. tr.ChangeLocale(langParam)
  97. context := GetCustomers()
  98. username := getUserName(r)
  99. vatNumber := getVatNumberSession(r)
  100. if vatNumber != "" {
  101. context.VatNumber = vatNumber
  102. }
  103. user := QueryUser(username)
  104. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  105. context.ImageName = user.ID
  106. context.UserID = user.ID
  107. context.UserEmail = user.Email
  108. renderView("customers.html", w, context)
  109. }
  110. func renderViewCustomerPage(w http.ResponseWriter, r *http.Request) {
  111. vars := mux.Vars(r)
  112. ID, err := strconv.Atoi(vars["id"])
  113. if err != nil {
  114. print(err.Error())
  115. fmt.Fprintf(w, "Not a valid id")
  116. }
  117. langParam := r.URL.Query().Get("lang")
  118. pathtolocale := os.Getenv("LOCALE_LANG")
  119. tr.Setup(langParam, langParam, pathtolocale)
  120. tr.ChangeLocale(langParam)
  121. context := GetViewCustomer()
  122. username := getUserName(r)
  123. vatNumber := getVatNumberSession(r)
  124. if vatNumber != "" {
  125. context.VatNumber = vatNumber
  126. }
  127. user := QueryUser(username)
  128. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  129. context.ImageName = user.ID
  130. context.UserID = user.ID
  131. singleCustomer := customers.SingleCustomerPerUser(ID, user.ID)
  132. context.MenuTitle = singleCustomer.CustomerName + " " + singleCustomer.CustomerSurname
  133. context.SingleCustomer = singleCustomer
  134. allAppointmentsPerCustomer := bookings.AllCommentsPerCustomer(ID)
  135. var lenCompleted []string
  136. var lenCanceled []string
  137. var lenPending []string
  138. for _, a := range allAppointmentsPerCustomer {
  139. if a.ServiceStatus == "complete" {
  140. lenCompleted = append(lenCompleted, a.ServiceStatus)
  141. }
  142. if a.ServiceStatus == "cancelled" {
  143. lenCanceled = append(lenCanceled, a.ServiceStatus)
  144. }
  145. if a.ServiceStatus == "pending" {
  146. lenPending = append(lenPending, a.ServiceStatus)
  147. }
  148. }
  149. context.LenCompletedServices = len(lenCompleted)
  150. context.LenCancelled = len(lenCanceled)
  151. context.LenPending = len(lenPending)
  152. var totalSalesServices float64
  153. var totalSalesProducts float64
  154. var totalDiscount float64
  155. allSalesPerCustomer := bookings.AllSalesTransPerCustomer(ID)
  156. for _, s := range allSalesPerCustomer {
  157. totalDiscount += s.ServiceDiscount
  158. if s.IsService == true {
  159. totalSalesServices += s.ServiceLineTotal
  160. }
  161. if s.IsService == false {
  162. totalSalesProducts += s.ServiceLineTotal
  163. }
  164. }
  165. context.TotalServices = totalSalesServices
  166. context.TotalProducts = totalSalesProducts
  167. context.TotalDiscount = totalDiscount
  168. context.Total = (totalSalesServices + totalSalesProducts)
  169. context.SingleCustomer = singleCustomer
  170. renderView("view-customer.html", w, context)
  171. }
  172. func renderCashRegisterPage(w http.ResponseWriter, r *http.Request) {
  173. langParam := r.URL.Query().Get("lang")
  174. pathtolocale := os.Getenv("LOCALE_LANG")
  175. tr.Setup(langParam, langParam, pathtolocale)
  176. tr.ChangeLocale(langParam)
  177. context := GetCashRegister()
  178. username := getUserName(r)
  179. vatNumber := getVatNumberSession(r)
  180. if vatNumber != "" {
  181. context.VatNumber = vatNumber
  182. }
  183. user := QueryUser(username)
  184. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  185. context.ImageName = user.ID
  186. context.UserID = user.ID
  187. renderView("cashregister.html", w, context)
  188. }
  189. func renderAccountingPage(w http.ResponseWriter, r *http.Request) {
  190. langParam := r.URL.Query().Get("lang")
  191. pathtolocale := os.Getenv("LOCALE_LANG")
  192. tr.Setup(langParam, langParam, pathtolocale)
  193. tr.ChangeLocale(langParam)
  194. context := GetAccounting()
  195. username := getUserName(r)
  196. vatNumber := getVatNumberSession(r)
  197. if vatNumber != "" {
  198. context.VatNumber = vatNumber
  199. }
  200. user := QueryUser(username)
  201. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  202. context.ImageName = user.ID
  203. renderView("accounting.html", w, context)
  204. }
  205. func renderCampaignPage(w http.ResponseWriter, r *http.Request) {
  206. langParam := r.URL.Query().Get("lang")
  207. pathtolocale := os.Getenv("LOCALE_LANG")
  208. tr.Setup(langParam, langParam, pathtolocale)
  209. tr.ChangeLocale(langParam)
  210. context := GetCampaign()
  211. username := getUserName(r)
  212. vatNumber := getVatNumberSession(r)
  213. if vatNumber != "" {
  214. context.VatNumber = vatNumber
  215. }
  216. user := QueryUser(username)
  217. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  218. context.ImageName = user.ID
  219. renderView("campaign.html", w, context)
  220. }
  221. func renderReportsPage(w http.ResponseWriter, r *http.Request) {
  222. langParam := r.URL.Query().Get("lang")
  223. pathtolocale := os.Getenv("LOCALE_LANG")
  224. tr.Setup(langParam, langParam, pathtolocale)
  225. tr.ChangeLocale(langParam)
  226. context := GetReports()
  227. username := getUserName(r)
  228. vatNumber := getVatNumberSession(r)
  229. if vatNumber != "" {
  230. context.VatNumber = vatNumber
  231. }
  232. user := QueryUser(username)
  233. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  234. context.ImageName = user.ID
  235. renderView("reports.html", w, context)
  236. }
  237. func renderReportSalesPage(w http.ResponseWriter, r *http.Request) {
  238. langParam := r.URL.Query().Get("lang")
  239. pathtolocale := os.Getenv("LOCALE_LANG")
  240. tr.Setup(langParam, langParam, pathtolocale)
  241. tr.ChangeLocale(langParam)
  242. context := GetReportSales()
  243. username := getUserName(r)
  244. vatNumber := getVatNumberSession(r)
  245. if vatNumber != "" {
  246. context.VatNumber = vatNumber
  247. }
  248. user := QueryUser(username)
  249. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  250. allShops := storesettings.GetAllShopsPerUser(user.ID)
  251. context.Stores = allShops
  252. context.ImageName = user.ID
  253. context.UserID = user.ID
  254. renderView("report-sales.html", w, context)
  255. }
  256. func renderUnfinishedCanceledPage(w http.ResponseWriter, r *http.Request) {
  257. langParam := r.URL.Query().Get("lang")
  258. pathtolocale := os.Getenv("LOCALE_LANG")
  259. tr.Setup(langParam, langParam, pathtolocale)
  260. tr.ChangeLocale(langParam)
  261. context := GetUnfinishedCanceled()
  262. username := getUserName(r)
  263. vatNumber := getVatNumberSession(r)
  264. if vatNumber != "" {
  265. context.VatNumber = vatNumber
  266. }
  267. user := QueryUser(username)
  268. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  269. context.ImageName = user.ID
  270. context.UserID = user.ID
  271. context.UserEmail = user.Email
  272. allShops := storesettings.GetAllShopsPerUser(user.ID)
  273. context.Stores = allShops
  274. renderView("unfinished-canceled.html", w, context)
  275. }
  276. func renderReportRevenueExpensesPage(w http.ResponseWriter, r *http.Request) {
  277. langParam := r.URL.Query().Get("lang")
  278. pathtolocale := os.Getenv("LOCALE_LANG")
  279. tr.Setup(langParam, langParam, pathtolocale)
  280. tr.ChangeLocale(langParam)
  281. context := GetReportRevenueExpenses()
  282. username := getUserName(r)
  283. vatNumber := getVatNumberSession(r)
  284. if vatNumber != "" {
  285. context.VatNumber = vatNumber
  286. }
  287. user := QueryUser(username)
  288. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  289. context.ImageName = user.ID
  290. context.UserID = user.ID
  291. allShops := storesettings.GetAllShopsPerUser(user.ID)
  292. context.Stores = allShops
  293. renderView("report-revenue-expenses.html", w, context)
  294. }
  295. func renderReportPendingDaysPage(w http.ResponseWriter, r *http.Request) {
  296. langParam := r.URL.Query().Get("lang")
  297. pathtolocale := os.Getenv("LOCALE_LANG")
  298. tr.Setup(langParam, langParam, pathtolocale)
  299. tr.ChangeLocale(langParam)
  300. context := GetReportPendingDays()
  301. username := getUserName(r)
  302. vatNumber := getVatNumberSession(r)
  303. if vatNumber != "" {
  304. context.VatNumber = vatNumber
  305. }
  306. user := QueryUser(username)
  307. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  308. context.ImageName = user.ID
  309. context.UserID = user.ID
  310. context.UserEmail = user.Email
  311. renderView("report-pending-days.html", w, context)
  312. }
  313. func renderReportCustomersWithBalancePage(w http.ResponseWriter, r *http.Request) {
  314. langParam := r.URL.Query().Get("lang")
  315. pathtolocale := os.Getenv("LOCALE_LANG")
  316. tr.Setup(langParam, langParam, pathtolocale)
  317. tr.ChangeLocale(langParam)
  318. context := GetReportCustomersWithBalance()
  319. username := getUserName(r)
  320. vatNumber := getVatNumberSession(r)
  321. if vatNumber != "" {
  322. context.VatNumber = vatNumber
  323. }
  324. user := QueryUser(username)
  325. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  326. context.ImageName = user.ID
  327. renderView("report-customers-with-balance.html", w, context)
  328. }
  329. func renderStoreSettingsPage(w http.ResponseWriter, r *http.Request) {
  330. langParam := r.URL.Query().Get("lang")
  331. pathtolocale := os.Getenv("LOCALE_LANG")
  332. tr.Setup(langParam, langParam, pathtolocale)
  333. tr.ChangeLocale(langParam)
  334. context := GetStoreSettings()
  335. username := getUserName(r)
  336. vatNumber := getVatNumberSession(r)
  337. if vatNumber != "" {
  338. context.VatNumber = vatNumber
  339. }
  340. user := QueryUser(username)
  341. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  342. context.ImageName = user.ID
  343. context.UserID = user.ID
  344. renderView("store-settings.html", w, context)
  345. }
  346. func renderStoreSettingsSmsEmailPage(w http.ResponseWriter, r *http.Request) {
  347. langParam := r.URL.Query().Get("lang")
  348. pathtolocale := os.Getenv("LOCALE_LANG")
  349. tr.Setup(langParam, langParam, pathtolocale)
  350. tr.ChangeLocale(langParam)
  351. context := GetStoreSettingsSmsEmail()
  352. username := getUserName(r)
  353. vatNumber := getVatNumberSession(r)
  354. if vatNumber != "" {
  355. context.VatNumber = vatNumber
  356. }
  357. user := QueryUser(username)
  358. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  359. context.ImageName = user.ID
  360. context.UserID = user.ID
  361. renderView("sms-email-settings.html", w, context)
  362. }
  363. func renderShopsPage(w http.ResponseWriter, r *http.Request) {
  364. langParam := r.URL.Query().Get("lang")
  365. pathtolocale := os.Getenv("LOCALE_LANG")
  366. tr.Setup(langParam, langParam, pathtolocale)
  367. tr.ChangeLocale(langParam)
  368. context := GetShops()
  369. username := getUserName(r)
  370. vatNumber := getVatNumberSession(r)
  371. if vatNumber != "" {
  372. context.VatNumber = vatNumber
  373. }
  374. user := QueryUser(username)
  375. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  376. context.ImageName = user.ID
  377. context.UserID = user.ID
  378. renderView("shops.html", w, context)
  379. }
  380. func renderHairdressersPage(w http.ResponseWriter, r *http.Request) {
  381. langParam := r.URL.Query().Get("lang")
  382. pathtolocale := os.Getenv("LOCALE_LANG")
  383. tr.Setup(langParam, langParam, pathtolocale)
  384. tr.ChangeLocale(langParam)
  385. context := GetHairdressers()
  386. username := getUserName(r)
  387. vatNumber := getVatNumberSession(r)
  388. if vatNumber != "" {
  389. context.VatNumber = vatNumber
  390. }
  391. user := QueryUser(username)
  392. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  393. context.ImageName = user.ID
  394. context.UserID = user.ID
  395. renderView("hairdressers.html", w, context)
  396. }
  397. func renderStoreProductsPage(w http.ResponseWriter, r *http.Request) {
  398. langParam := r.URL.Query().Get("lang")
  399. pathtolocale := os.Getenv("LOCALE_LANG")
  400. tr.Setup(langParam, langParam, pathtolocale)
  401. tr.ChangeLocale(langParam)
  402. context := GetStoreProducts()
  403. username := getUserName(r)
  404. vatNumber := getVatNumberSession(r)
  405. if vatNumber != "" {
  406. context.VatNumber = vatNumber
  407. }
  408. user := QueryUser(username)
  409. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  410. context.ImageName = user.ID
  411. context.UserID = user.ID
  412. var allActiveSuppliers []storesettings.Supplier
  413. suppliers := storesettings.GetAllSuppliersPerUser(user.ID)
  414. for _, s := range suppliers {
  415. if s.IsActive == true {
  416. allActiveSuppliers = append(allActiveSuppliers, s)
  417. }
  418. }
  419. context.Suppliers = allActiveSuppliers
  420. renderView("products.html", w, context)
  421. }
  422. func renderStoreSuppliersPage(w http.ResponseWriter, r *http.Request) {
  423. langParam := r.URL.Query().Get("lang")
  424. pathtolocale := os.Getenv("LOCALE_LANG")
  425. tr.Setup(langParam, langParam, pathtolocale)
  426. tr.ChangeLocale(langParam)
  427. context := GetStoreSuppliers()
  428. username := getUserName(r)
  429. println(username)
  430. user := QueryUser(username)
  431. vatNumber := getVatNumberSession(r)
  432. if vatNumber != "" {
  433. context.VatNumber = vatNumber
  434. }
  435. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  436. context.ImageName = user.ID
  437. context.UserID = user.ID
  438. renderView("suppliers.html", w, context)
  439. }
  440. func renderCampaignGooglePage(w http.ResponseWriter, r *http.Request) {
  441. langParam := r.URL.Query().Get("lang")
  442. pathtolocale := os.Getenv("LOCALE_LANG")
  443. tr.Setup(langParam, langParam, pathtolocale)
  444. tr.ChangeLocale(langParam)
  445. context := GetCampaignGoogle()
  446. username := getUserName(r)
  447. vatNumber := getVatNumberSession(r)
  448. if vatNumber != "" {
  449. context.VatNumber = vatNumber
  450. }
  451. user := QueryUser(username)
  452. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  453. context.ImageName = user.ID
  454. renderView("campaigngoogle.html", w, context)
  455. }
  456. func renderCampaignFacebookPage(w http.ResponseWriter, r *http.Request) {
  457. langParam := r.URL.Query().Get("lang")
  458. pathtolocale := os.Getenv("LOCALE_LANG")
  459. tr.Setup(langParam, langParam, pathtolocale)
  460. tr.ChangeLocale(langParam)
  461. context := GetCampaignFacebook()
  462. username := getUserName(r)
  463. vatNumber := getVatNumberSession(r)
  464. if vatNumber != "" {
  465. context.VatNumber = vatNumber
  466. }
  467. user := QueryUser(username)
  468. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  469. context.ImageName = user.ID
  470. renderView("campaignfacebook.html", w, context)
  471. }
  472. func renderCampaignSmsPage(w http.ResponseWriter, r *http.Request) {
  473. langParam := r.URL.Query().Get("lang")
  474. pathtolocale := os.Getenv("LOCALE_LANG")
  475. tr.Setup(langParam, langParam, pathtolocale)
  476. tr.ChangeLocale(langParam)
  477. context := GetCampaignSms()
  478. username := getUserName(r)
  479. vatNumber := getVatNumberSession(r)
  480. if vatNumber != "" {
  481. context.VatNumber = vatNumber
  482. }
  483. user := QueryUser(username)
  484. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  485. context.ImageName = user.ID
  486. renderView("campaignsms.html", w, context)
  487. }
  488. func renderStoreSettingsServicesPage(w http.ResponseWriter, r *http.Request) {
  489. langParam := r.URL.Query().Get("lang")
  490. pathtolocale := os.Getenv("LOCALE_LANG")
  491. tr.Setup(langParam, langParam, pathtolocale)
  492. tr.ChangeLocale(langParam)
  493. context := GetStoreSettingsServices()
  494. username := getUserName(r)
  495. vatNumber := getVatNumberSession(r)
  496. if vatNumber != "" {
  497. context.VatNumber = vatNumber
  498. }
  499. user := QueryUser(username)
  500. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  501. context.ImageName = user.ID
  502. context.UserID = user.ID
  503. categories := storesettings.GetAllCategoriesPerUser(user.ID)
  504. context.LenCategories = len(categories)
  505. context.Categories = categories
  506. subCategories := storesettings.GetAllSubCategoriesPerUser(user.ID)
  507. context.SubCategories = subCategories
  508. renderView("services.html", w, context)
  509. }
  510. func renderCampaignEmailPage(w http.ResponseWriter, r *http.Request) {
  511. langParam := r.URL.Query().Get("lang")
  512. pathtolocale := os.Getenv("LOCALE_LANG")
  513. tr.Setup(langParam, langParam, pathtolocale)
  514. tr.ChangeLocale(langParam)
  515. context := GetCampaignEmail()
  516. username := getUserName(r)
  517. vatNumber := getVatNumberSession(r)
  518. if vatNumber != "" {
  519. context.VatNumber = vatNumber
  520. }
  521. user := QueryUser(username)
  522. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  523. context.ImageName = user.ID
  524. renderView("campaignemail.html", w, context)
  525. }
  526. func renderCalendarPage(w http.ResponseWriter, r *http.Request) {
  527. langParam := r.URL.Query().Get("lang")
  528. pathtolocale := os.Getenv("LOCALE_LANG")
  529. tr.Setup(langParam, langParam, pathtolocale)
  530. tr.ChangeLocale(langParam)
  531. context := GetCalendar()
  532. username := getUserName(r)
  533. vatNumber := getVatNumberSession(r)
  534. if vatNumber != "" {
  535. context.VatNumber = vatNumber
  536. }
  537. user := QueryUser(username)
  538. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  539. context.ImageName = user.ID
  540. context.UserID = user.ID
  541. // allcustomers := customers.GetAllCustomersPerUser(user.ID)
  542. // context.Customers = allcustomers
  543. allShops := storesettings.GetAllShopsPerUser(user.ID)
  544. context.Stores = allShops
  545. // // get client ip address
  546. // ip, _, _ := net.SplitHostPort(r.RemoteAddr)
  547. // // print out the ip address
  548. // fmt.Println(w, ip+"\n\n")
  549. // // sometimes, the user acccess the web server via a proxy or load balancer.
  550. // // The above IP address will be the IP address of the proxy or load balancer and not the user's machine.
  551. // // let's get the request HTTP header "X-Forwarded-For (XFF)"
  552. // // if the value returned is not null, then this is the real IP address of the user.
  553. // fmt.Println(w, "X-Forwarded-For :"+r.Header.Get("X-FORWARDED-FOR"))
  554. renderView("calendar.html", w, context)
  555. }
  556. func renderCheckoutCalendarPage(w http.ResponseWriter, r *http.Request) {
  557. if r.Method == "POST" {
  558. langParam := r.URL.Query().Get("lang")
  559. pathtolocale := os.Getenv("LOCALE_LANG")
  560. tr.Setup(langParam, langParam, pathtolocale)
  561. tr.ChangeLocale(langParam)
  562. context := GetCheckoutCalendar()
  563. username := getUserName(r)
  564. vatNumber := getVatNumberSession(r)
  565. if vatNumber != "" {
  566. context.VatNumber = vatNumber
  567. }
  568. user := QueryUser(username)
  569. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  570. context.ImageName = user.ID
  571. context.UserID = user.ID
  572. hairdresserID := r.FormValue("hairdresserID")
  573. hairdresserIDInt, _ := strconv.Atoi(hairdresserID)
  574. customerID := r.FormValue("customerID")
  575. eventDate := r.FormValue("eventDate")
  576. customerName := r.FormValue("customerName")
  577. customerEmail := r.FormValue("customerEmail")
  578. customerMobileNumber := r.FormValue("customerPhoneNumber")
  579. hairdreserName := r.FormValue("hairdreserName")
  580. storeID := r.FormValue("storeID")
  581. storeIDInt, _ := strconv.Atoi(storeID)
  582. customerIDInt, _ := strconv.Atoi(customerID)
  583. // serviceStatus := r.FormValue("serviceStatus")
  584. context.HairdresserName = hairdreserName
  585. context.CustomerName = customerName
  586. context.CustomerEmail = customerEmail
  587. context.CustomerPhone = customerMobileNumber
  588. eventDateTime, _ := time.Parse("2006-01-02T15:04:05", eventDate)
  589. context.AppointmentCloseDay = eventDateTime
  590. context.MenuTitle = hairdreserName
  591. allAppointmentsPerCustomerPerDay := bookings.AllAppointmentPerCustomerPerDay(user.ID, storeIDInt, customerIDInt, eventDate)
  592. services := storesettings.GetAllServicesPerUserPerStore(user.ID, storeIDInt)
  593. var allAppointmentsPercusPerDay []bookings.CustomerCheckout
  594. var total float64
  595. var totalDiscount float64
  596. for _, c := range allAppointmentsPerCustomerPerDay {
  597. for _, s := range services {
  598. if c.ServiceName == s.ServiceName {
  599. c.SwitchFormula = s.SwitchFormula
  600. totaPerRow := c.ServicePrice - c.ServiceDiscount
  601. c.TotalPerRow = totaPerRow
  602. totalDiscount += c.ServiceDiscount
  603. allAppointmentsPercusPerDay = append(allAppointmentsPercusPerDay, c)
  604. total += c.ServicePrice
  605. }
  606. }
  607. }
  608. context.CustomerCheckout = allAppointmentsPercusPerDay
  609. context.TotalDiscount = totalDiscount
  610. context.Total = total - totalDiscount
  611. customerPoints := customers.SingleCustomerPerUser(customerIDInt, user.ID)
  612. context.SingleCustomer = customerPoints
  613. context.StoreID = storeIDInt
  614. context.HairdresserID = hairdresserIDInt
  615. context.CustomerID = customerIDInt
  616. // context.EventID = eventID
  617. renderView("checkout-calendar.html", w, context)
  618. }
  619. }
  620. func renderPromotionsPage(w http.ResponseWriter, r *http.Request) {
  621. langParam := r.URL.Query().Get("lang")
  622. pathtolocale := os.Getenv("LOCALE_LANG")
  623. tr.Setup(langParam, langParam, pathtolocale)
  624. tr.ChangeLocale(langParam)
  625. context := GetPromotions()
  626. username := getUserName(r)
  627. vatNumber := getVatNumberSession(r)
  628. if vatNumber != "" {
  629. context.VatNumber = vatNumber
  630. }
  631. user := QueryUser(username)
  632. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  633. context.ImageName = user.ID
  634. context.UserID = user.ID
  635. renderView("promotions.html", w, context)
  636. }
  637. func renderRewardsPage(w http.ResponseWriter, r *http.Request) {
  638. langParam := r.URL.Query().Get("lang")
  639. pathtolocale := os.Getenv("LOCALE_LANG")
  640. tr.Setup(langParam, langParam, pathtolocale)
  641. tr.ChangeLocale(langParam)
  642. context := GetRewards()
  643. username := getUserName(r)
  644. vatNumber := getVatNumberSession(r)
  645. if vatNumber != "" {
  646. context.VatNumber = vatNumber
  647. }
  648. user := QueryUser(username)
  649. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  650. context.ImageName = user.ID
  651. renderView("rewards.html", w, context)
  652. }
  653. func renderRecommendationsPage(w http.ResponseWriter, r *http.Request) {
  654. langParam := r.URL.Query().Get("lang")
  655. pathtolocale := os.Getenv("LOCALE_LANG")
  656. tr.Setup(langParam, langParam, pathtolocale)
  657. tr.ChangeLocale(langParam)
  658. context := GetRecommendations()
  659. username := getUserName(r)
  660. vatNumber := getVatNumberSession(r)
  661. if vatNumber != "" {
  662. context.VatNumber = vatNumber
  663. }
  664. user := QueryUser(username)
  665. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  666. context.ImageName = user.ID
  667. renderView("recommendations.html", w, context)
  668. }
  669. func notFound(w http.ResponseWriter, r *http.Request) {
  670. langParam := r.URL.Query().Get("lang")
  671. pathtolocale := os.Getenv("LOCALE_LANG")
  672. tr.Setup(langParam, langParam, pathtolocale)
  673. tr.ChangeLocale(langParam)
  674. context := Get404()
  675. username := getUserName(r)
  676. vatNumber := getVatNumberSession(r)
  677. if vatNumber != "" {
  678. context.VatNumber = vatNumber
  679. }
  680. context.Username = username
  681. if len(username) != 0 {
  682. renderView("404.html", w, context)
  683. return
  684. } else if len(username) < 1 {
  685. var loginTemplate = template.Must(template.New("4041.html").Funcs(templateFuncMap).ParseFiles("views/4041.html"))
  686. err := loginTemplate.Execute(w, context)
  687. if err != nil {
  688. println(err.Error())
  689. }
  690. }
  691. }
  692. func renderMyProfilePage(w http.ResponseWriter, r *http.Request) {
  693. langParam := r.URL.Query().Get("lang")
  694. pathtolocale := os.Getenv("LOCALE_LANG")
  695. tr.Setup(langParam, langParam, pathtolocale)
  696. tr.ChangeLocale(langParam)
  697. context := GetMyProfile()
  698. username := getUserName(r)
  699. vatNumber := getVatNumberSession(r)
  700. if vatNumber != "" {
  701. context.VatNumber = vatNumber
  702. }
  703. user := QueryUser(username)
  704. context.ImageName = user.ID
  705. context.UserProfile = user.Username
  706. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  707. context.User = user
  708. renderView("my-profile.html", w, context)
  709. }
  710. func renderExpensesPage(w http.ResponseWriter, r *http.Request) {
  711. langParam := r.URL.Query().Get("lang")
  712. pathtolocale := os.Getenv("LOCALE_LANG")
  713. tr.Setup(langParam, langParam, pathtolocale)
  714. tr.ChangeLocale(langParam)
  715. context := GetExpenses()
  716. username := getUserName(r)
  717. vatNumber := getVatNumberSession(r)
  718. if vatNumber != "" {
  719. context.VatNumber = vatNumber
  720. }
  721. user := QueryUser(username)
  722. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  723. context.ImageName = user.ID
  724. context.UserID = user.ID
  725. renderView("expenses.html", w, context)
  726. }
  727. func renderIncomePage(w http.ResponseWriter, r *http.Request) {
  728. langParam := r.URL.Query().Get("lang")
  729. pathtolocale := os.Getenv("LOCALE_LANG")
  730. tr.Setup(langParam, langParam, pathtolocale)
  731. tr.ChangeLocale(langParam)
  732. context := GetIncome()
  733. username := getUserName(r)
  734. vatNumber := getVatNumberSession(r)
  735. if vatNumber != "" {
  736. context.VatNumber = vatNumber
  737. }
  738. user := QueryUser(username)
  739. context.Username = user.CompanyName + " " + "<br>" + "(" + user.Username + ")"
  740. context.ImageName = user.ID
  741. context.UserID = user.ID
  742. context.Categories = storesettings.GetAllCategoriesPerUser(user.ID)
  743. renderView("income.html", w, context)
  744. }
  745. func main() {
  746. fmt.Println(mysqldb.EncryptPass(mysqldb.KeyGenerator, "SailIn1985!"))
  747. http.Handle("/static/", CacheMiddleware(http.StripPrefix("/static/", http.FileServer(http.Dir("static"))), 7*24*time.Hour))
  748. router := mux.NewRouter()
  749. router.HandleFunc("/", Index)
  750. router.Handle("/admin", AdminCheck(http.HandlerFunc(Admin), true))
  751. router.HandleFunc("/admin/login", login)
  752. router.HandleFunc("/register", renderRegister)
  753. router.HandleFunc("/admin/register", Register).Methods("POST")
  754. router.HandleFunc("/activate/{email}/{token}", packageRegister).Methods("GET")
  755. router.Handle("/admin/logout", AdminCheck(http.HandlerFunc(logout), true))
  756. router.Handle("/admin/subscription", AdminCheck(http.HandlerFunc(renderSubscriptionPage), true))
  757. router.Handle("/admin/customers", AdminCheck(http.HandlerFunc(renderCustomersPage), true))
  758. router.Handle("/admin/billing", AdminCheck(http.HandlerFunc(renderBillingPage), true))
  759. router.HandleFunc("/cashregister", renderCashRegisterPage)
  760. router.HandleFunc("/accounting", renderAccountingPage)
  761. router.HandleFunc("/campaign", renderCampaignPage)
  762. router.Handle("/admin/reports", AdminCheck(http.HandlerFunc(renderReportsPage), true))
  763. router.Handle("/admin/store-settings", AdminCheck(http.HandlerFunc(renderStoreSettingsPage), true))
  764. router.Handle("/admin/sms-email-settings", AdminCheck(http.HandlerFunc(renderStoreSettingsSmsEmailPage), true))
  765. router.Handle("/admin/stores", AdminCheck(http.HandlerFunc(renderShopsPage), true))
  766. router.Handle("/admin/hairdressers", AdminCheck(http.HandlerFunc(renderHairdressersPage), true))
  767. router.Handle("/admin/suppliers", AdminCheck(http.HandlerFunc(renderStoreSuppliersPage), true))
  768. router.Handle("/admin/products", AdminCheck(http.HandlerFunc(renderStoreProductsPage), true))
  769. router.Handle("/admin/services", AdminCheck(http.HandlerFunc(renderStoreSettingsServicesPage), true))
  770. router.HandleFunc("/admin/rewards", renderRewardsPage)
  771. router.Handle("/admin/promotions", AdminCheck(http.HandlerFunc(renderPromotionsPage), true))
  772. router.HandleFunc("/admin/recommendations", renderRecommendationsPage)
  773. router.Handle("/admin/api/all-stores-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllShopsJSONPerUser), true))
  774. //My Campaigns
  775. router.Handle("/admin/campaigngoogle", AdminCheck(http.HandlerFunc(renderCampaignGooglePage), true))
  776. router.Handle("/admin/campaignfacebook", AdminCheck(http.HandlerFunc(renderCampaignFacebookPage), true))
  777. router.Handle("/admin/campaignsms", AdminCheck(http.HandlerFunc(renderCampaignSmsPage), true))
  778. router.Handle("/admin/campaignemail", AdminCheck(http.HandlerFunc(renderCampaignEmailPage), true))
  779. //My Profile
  780. router.Handle("/admin/my-profile", AdminCheck(http.HandlerFunc(renderMyProfilePage), true))
  781. router.Handle("/admin/api/profile/{id}", AdminCheck(http.HandlerFunc(GetSingleUser), true))
  782. router.Handle("/admin/api/update-user/{id}", AdminCheck(http.HandlerFunc(UpdateSingleUser), true))
  783. //Store settings
  784. router.Handle("/admin/api/create-shop", AdminCheck(http.HandlerFunc(storesettings.CreateShops), true))
  785. router.Handle("/admin/api/change-password-for-shop/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateShopPassword), true))
  786. router.Handle("/admin/api/all-shops-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllShopsJSONPerUser), true))
  787. router.Handle("/admin/api/update-single-shop/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateShopJSON), true))
  788. router.Handle("/admin/api/disable-single-shop/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableShop), true))
  789. router.Handle("/admin/api/insert-wekkly-hours", AdminCheck(http.HandlerFunc(storesettings.InsertWeeklyHoursDataToDB), true))
  790. router.Handle("/admin/api/all-weekly-hours-per-user/{userid}", AdminCheck(http.HandlerFunc(storesettings.AllWeeklyHoursPerUserJSON), true))
  791. router.Handle("/admin/api/all-weekly-hours-per-user-per-store/{userid}/{storeid}", AdminCheck(http.HandlerFunc(storesettings.AllWeeklyHoursPerUserPerStoreJSON), true))
  792. router.Handle("/admin/api/delete-day-of-the-week/{id}", AdminCheck(http.HandlerFunc(storesettings.DeleteWeekDay), true))
  793. //Services settings
  794. router.Handle("/admin/api/create-service", AdminCheck(http.HandlerFunc(storesettings.CreateServices), true))
  795. router.Handle("/admin/api/all-services-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllServicesJSONPerUser), true))
  796. router.Handle("/admin/api/update-service/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateServiceJSON), true))
  797. router.Handle("/admin/api/enable-disable-service/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableService), true))
  798. router.Handle("/admin/api/enable-disable-has-formula/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.HasFormulaService), true))
  799. router.Handle("/admin/api/delete-single-service/{id}", AdminCheck(http.HandlerFunc(storesettings.DeleteService), true))
  800. //Service Categories settings
  801. router.Handle("/admin/api/create-category", AdminCheck(http.HandlerFunc(storesettings.CreateCategory), true))
  802. router.Handle("/admin/api/all-categories-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllCategoriesJSONPerUser), true))
  803. router.Handle("/admin/api/update-category/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateCategoryJSON), true))
  804. router.Handle("/admin/api/enable-disable-category/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableCategory), true))
  805. router.Handle("/admin/api/delete-single-category/{id}/{categoryname}/{userid}", AdminCheck(http.HandlerFunc(storesettings.DeleteCategory), true))
  806. //Service Sub Categories settings
  807. router.Handle("/admin/api/create-sub-category", AdminCheck(http.HandlerFunc(storesettings.CreateSubCategory), true))
  808. router.Handle("/admin/api/all-sub-categories-per-user/{id}/{catid}", AdminCheck(http.HandlerFunc(storesettings.AllSubCategoriesJSONPerUser), true))
  809. router.Handle("/admin/api/all-sub-categories/{id}", AdminCheck(http.HandlerFunc(storesettings.AllSubCategoriesJSONAnaUser), true))
  810. router.Handle("/admin/api/update-sub-category/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateSubCategoryJSON), true))
  811. router.Handle("/admin/api/enable-disable-sub-category/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableSubCategory), true))
  812. router.Handle("/admin/api/delete-single-sub-category/{id}", AdminCheck(http.HandlerFunc(storesettings.DeleteSubCategory), true))
  813. //Suppliers settings
  814. router.Handle("/admin/api/create-supplier", AdminCheck(http.HandlerFunc(storesettings.CreateSupplier), true))
  815. router.Handle("/admin/api/all-suppliers-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllSuppliersJSONPerUser), true))
  816. router.Handle("/admin/api/update-supplier/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateSupplierJSON), true))
  817. router.Handle("/admin/api/enable-disable-supplier/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableSupplier), true))
  818. router.Handle("/admin/api/check-vat-exists-for-supplier", AdminCheck(http.HandlerFunc(storesettings.CheckIfVatExistsForSuppliers), true))
  819. router.Handle("/admin/api/delete-single-supplier/{id}", AdminCheck(http.HandlerFunc(storesettings.DeleteSupplier), true))
  820. //Products settings
  821. router.Handle("/admin/api/create-product", AdminCheck(http.HandlerFunc(storesettings.CreateProducts), true))
  822. router.Handle("/admin/api/all-products-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllProductsJSONPerUser), true))
  823. router.Handle("/admin/api/update-product/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateProductJSON), true))
  824. router.Handle("/admin/api/enable-disable-product/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableProduct), true))
  825. router.Handle("/admin/api/enable-disable-can-split-product/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.CanSPlitProduct), true))
  826. router.Handle("/admin/api/all-products-per-user-per-store/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.GetAllProductsPerUserPerStoreJSON), true))
  827. router.Handle("/admin/api/product-qty/{id}", AdminCheck(http.HandlerFunc(storesettings.TotalProductQTY), true))
  828. //Hairdresser settings
  829. router.Handle("/admin/api/create-hairdresser", AdminCheck(http.HandlerFunc(storesettings.CreateHairdresser), true))
  830. router.Handle("/admin/api/all-hairdressers-per-user/{id}", AdminCheck(http.HandlerFunc(storesettings.AllHairdressersJSONPerUser), true))
  831. router.Handle("/admin/api/update-hairdresser/{id}", AdminCheck(http.HandlerFunc(storesettings.UpdateHairdresserJSON), true))
  832. router.Handle("/admin/api/enable-disable-hairdresser/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.DisableHairdresser), true))
  833. router.Handle("/admin/api/change-hairdresser-color/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.ChangeHairdresserColor), true))
  834. //Customer settings
  835. router.Handle("/admin/api/create-customer", AdminCheck(http.HandlerFunc(customers.CreateCustomer), true))
  836. router.Handle("/admin/api/all-customers-per-user/{id}", AdminCheck(http.HandlerFunc(customers.AllCustomersJSONPerUser), true))
  837. router.Handle("/admin/api/update-customer/{id}", AdminCheck(http.HandlerFunc(customers.UpdateCustomerJSON), true))
  838. router.Handle("/admin/view-customer/{id}/{name}", AdminCheck(http.HandlerFunc(renderViewCustomerPage), true))
  839. router.Handle("/admin/api/all-sales-per-customer/{customerid}", AdminCheck(http.HandlerFunc(bookings.AllSalesTransCustomerJSON), true))
  840. router.Handle("/admin/api/all-events-per-customer/{customerid}", AdminCheck(http.HandlerFunc(bookings.AllCalendarEventsPerCustomerJSON), true))
  841. router.Handle("/admin/api/update-comment/{id}", AdminCheck(http.HandlerFunc(bookings.UpdateComment), true))
  842. router.Handle("/admin/api/all-gold-customers-per-user/{id}/{points}", AdminCheck(http.HandlerFunc(customers.AllGoldCustomersJSONPerUser), true))
  843. router.Handle("/admin/api/send-sms-from-gold-customers", AdminCheck(http.HandlerFunc(customers.SendSMSFormGoldCustomersJSON), true))
  844. router.Handle("/admin/api/send-email-from-gold-customers", AdminCheck(http.HandlerFunc(customers.SendEmailForGoldenCustomer), true))
  845. router.Handle("/admin/api/all-inactive-customers-per-user/{id}/{from}/{to}", AdminCheck(http.HandlerFunc(customers.AllInactiveCustomersJSONPerUser), true))
  846. router.Handle("/admin/api/all-bthday-customers-per-user/{id}/{bthday}", AdminCheck(http.HandlerFunc(customers.AllBthadyCustomersJSONPerUser), true))
  847. router.Handle("/admin/api/insert-bonus-points/{id}", AdminCheck(http.HandlerFunc(customers.UpdateCustomersPoints), true))
  848. // Expenses
  849. router.Handle("/admin/expenses", AdminCheck(http.HandlerFunc(renderExpensesPage), true))
  850. router.Handle("/admin/api/create-cost-category", AdminCheck(http.HandlerFunc(expenses.CreateCostCategory), true))
  851. router.Handle("/admin/api/all-cost-categories-per-user/{id}", AdminCheck(http.HandlerFunc(expenses.AllCostCategoriesJSONPerUser), true))
  852. router.Handle("/admin/api/update-cost-category/{id}", AdminCheck(http.HandlerFunc(expenses.UpdateCostCategoryJSON), true))
  853. router.Handle("/admin/api/enable-disable-cost-category/{id}", AdminCheck(http.HandlerFunc(expenses.DisableCostCategory), true))
  854. router.Handle("/admin/api/delete-single-cost-category/{id}", AdminCheck(http.HandlerFunc(expenses.DeleteCostCategory), true))
  855. router.Handle("/admin/api/create-expense", AdminCheck(http.HandlerFunc(expenses.InsertExpenseToDB), true))
  856. router.Handle("/admin/api/all-expenses-per-user/{id}", AdminCheck(http.HandlerFunc(expenses.AllExpensesJSONPerUser), true))
  857. router.Handle("/admin/api/paid-unpaid/{id}", AdminCheck(http.HandlerFunc(expenses.PaidUnpaid), true))
  858. router.Handle("/admin/api/delete-single-expense/{id}", AdminCheck(http.HandlerFunc(expenses.DeleteExpense), true))
  859. router.Handle("/admin/api/edit-expense/{id}", AdminCheck(http.HandlerFunc(expenses.UpdateExpenseJSON), true))
  860. // Income
  861. router.Handle("/admin/income", AdminCheck(http.HandlerFunc(renderIncomePage), true))
  862. router.Handle("/admin/api/insert-income-checkout-data", AdminCheck(http.HandlerFunc(income.InsertIncomeCheckoutDataToDB), true))
  863. // Calendar
  864. router.Handle("/admin/calendar", AdminCheck(http.HandlerFunc(renderCalendarPage), true))
  865. router.Handle("/admin/api/all-calendar-resourcesfe/{userid}/{storeid}", AdminCheck(http.HandlerFunc(bookings.AllCalendarResourcesJSONPerUser), true)).Methods("POST")
  866. router.Handle("/admin/api/all-services-per-user-per-store/{storeid}/{id}", AdminCheck(http.HandlerFunc(storesettings.GetAllServicesPerUserPerStoreJSON), true))
  867. router.Handle("/admin/api/create-rantevou", AdminCheck(http.HandlerFunc(bookings.InsertRantevouJSON), true))
  868. router.Handle("/admin/api/all-calendar-events/{userid}/{storeid}/{eventtime}/{endtime}", AdminCheck(http.HandlerFunc(bookings.AllCalendarEventsJSONPerUser), true))
  869. router.Handle("/admin/api/update-calendar", AdminCheck(http.HandlerFunc(bookings.UpdateCalendarDataJSONToDB), true))
  870. router.Handle("/admin/api/update-calendar-with-hairdresser-id", AdminCheck(http.HandlerFunc(bookings.UpdateCalendarDataJSONToDBWithHairdresserID), true))
  871. router.Handle("/admin/api/all-appointments-per-customer/{customerid}", AdminCheck(http.HandlerFunc(bookings.AllAppointmentPerCustomerJSON), true))
  872. router.Handle("/admin/api/create-feature-rantevou", AdminCheck(http.HandlerFunc(bookings.InsertFeatureRantevouJSON), true))
  873. router.Handle("/admin/api/all-bank-holidays-per-store/{storeid}", AdminCheck(http.HandlerFunc(storesettings.AllHolidaysJSONPerStore), true))
  874. router.Handle("/admin/api/cancelled-single-appointment", AdminCheck(http.HandlerFunc(bookings.CancelAppointmentJSON), true))
  875. //Checkout
  876. router.Handle("/admin/checkout", AdminCheck(http.HandlerFunc(renderCheckoutCalendarPage), true))
  877. router.Handle("/admin/api/insert-checkout-data", AdminCheck(http.HandlerFunc(bookings.InsertCheckoutDataToDB), true))
  878. router.Handle("/admin/api/insert-invoice-data", AdminCheck(http.HandlerFunc(bookings.InsertInvoiceJSON), true))
  879. router.Handle("/admin/api/all-invoices-per-store/{storeid}", AdminCheck(http.HandlerFunc(bookings.AllInvoicesPerCustomerJSON), true))
  880. //Promotions
  881. router.Handle("/admin/api/insert-promotion-data", AdminCheck(http.HandlerFunc(promotions.InsertPromotionDataToDB), true))
  882. router.Handle("/admin/api/all-promotion-services-per-user/{userid}", AdminCheck(http.HandlerFunc(promotions.AllPromotionServicesJSON), true))
  883. router.Handle("/admin/api/all-promotion-products-per-user/{userid}", AdminCheck(http.HandlerFunc(promotions.AllPromotionProductsJSON), true))
  884. router.Handle("/admin/api/update-promotion-data/{promid}", AdminCheck(http.HandlerFunc(promotions.UpdateSinglePromotionDataToDB), true))
  885. router.Handle("/admin/api/delete-promotion-data/{promid}", AdminCheck(http.HandlerFunc(promotions.Deletepromotion), true))
  886. router.Handle("/admin/api/all-promotion-services-per-service-per-user-per-store/{userid}/{storeid}/{serviceid}", AdminCheck(http.HandlerFunc(promotions.AllPromotionServicesPerUserPerStoreJSON), true))
  887. router.Handle("/admin/api/all-promotion-services-per-products-per-user-per-store/{userid}/{storeid}/{productid}", AdminCheck(http.HandlerFunc(promotions.AllPromotionProductsPerUserPerStoreJSON), true))
  888. // router.Handle("/admin/api/all-appointment-per-customer", AdminCheck(http.HandlerFunc(bookings.AllAppointmentPerCustomerPerDayJSON), true))
  889. // Report
  890. router.Handle("/admin/reportsales", AdminCheck(http.HandlerFunc(renderReportSalesPage), true))
  891. router.Handle("/admin/api/all-services-sales-per-employee/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(resportssales.GetAlServiceslSalesPerEmployeeJSON), true))
  892. router.Handle("/admin/api/all-services-sales-per-employee-graph/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(resportssales.GetAlServiceslSalesPerEmployeeJSONGraph), true))
  893. router.Handle("/admin/api/all-products-sales-per-employee/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(resportssales.GetAlProductsSalesPerEmployeeJSON), true))
  894. router.Handle("/admin/api/all-services-sales-per-service/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(resportssales.GetAlServicesSalesJSON), true))
  895. router.Handle("/admin/unfinishedcanceled", AdminCheck(http.HandlerFunc(renderUnfinishedCanceledPage), true))
  896. router.Handle("/admin/api/all-cancellations/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(cancellation.AllCancelledAppointmentJSON), true))
  897. router.Handle("/admin/api/all-cancellations-per-day-graph/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(cancellation.GetAllAppointmentsPesServiceStatusSONGraph), true))
  898. router.Handle("/admin/api/total-appointments-per-status/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(cancellation.GetAllAppointmentsPerStatusJSON), true))
  899. //Revenue Reports
  900. router.Handle("/admin/reportrevenueexpenses", AdminCheck(http.HandlerFunc(renderReportRevenueExpensesPage), true))
  901. router.Handle("/admin/api/total-revenue-sales-and-services/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(revenueexpenses.CallRevenueDataJSON), true))
  902. router.Handle("/admin/api/total-revenue-sales-and-services-graph/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(revenueexpenses.GetAllSalesPerServiceProductPerDateJSONGraph), true))
  903. router.Handle("/admin/api/total-expenses-sales/{id}/{storeid}/{from}/{to}", AdminCheck(http.HandlerFunc(revenueexpenses.TotalExpensesDataJSON), true))
  904. router.Handle("/admin/reportpendingdays", AdminCheck(http.HandlerFunc(renderReportPendingDaysPage), true))
  905. router.Handle("/admin/api/all-pending-services-per-user/{userid}", AdminCheck(http.HandlerFunc(pendaingdays.AllSalesTransCustomerJSON), true))
  906. router.Handle("/admin/reportcustomerswithbalance", AdminCheck(http.HandlerFunc(renderReportCustomersWithBalancePage), true))
  907. router.Handle("/admin/api/count-pending-appointment/{id}/{storeid}/{today}", AdminCheck(http.HandlerFunc(CountAllPendingAppointmentJSON), true))
  908. router.Handle("/admin/api/count-cancelled-appointment/{id}/{storeid}/{today}", AdminCheck(http.HandlerFunc(CountAllCancelledAppointmentJSON), true))
  909. router.Handle("/admin/api/total-sales-per-month/{id}/{storeid}", AdminCheck(http.HandlerFunc(GetAllSalesPerMonthPerStoreJSON), true))
  910. router.Handle("/admin/api/total-expenses-per-month/{id}/{storeid}", AdminCheck(http.HandlerFunc(GetAllExpensesPerMonthPerStoreJSON), true))
  911. router.NotFoundHandler = http.HandlerFunc(notFound)
  912. http.Handle("/", router)
  913. // GetStatheresGiortes()
  914. // storesettings.BankHolidays()
  915. log.Printf("Listening on port %+v\n", c.HTTPPLATFORMPORT)
  916. log.Println(http.ListenAndServe(":"+c.HTTPPLATFORMPORT, nil))
  917. // http.ListenAndSerrve(":3001", nil)
  918. }