Beispiel #1
0
func (this *profileController) get(w http.ResponseWriter, req *http.Request) {
	vm := viewmodels.GetProfile()

	responseWriter := util.GetResponseWriter(w, req)

	ck, err := req.Cookie("goSessionId")

	if err == nil {
		vm.LoggedIn = true

		userId, _ := strconv.Atoi(ck.Value)
		modelMember, _ := models.GetMemberById(userId)
		vm.Member = converter.ConvertMemberlToViewModel(modelMember)

		if req.Method == "GET" {
			var listOfProductIds []int
			listOfProductIds, _ = models.GetMembersOrder(userId)

			var listOfProducts []viewmodels.Product
			for _, val := range listOfProductIds {
				pr, _ := models.GetProduct(val)
				listOfProducts = append(listOfProducts, converter.ConvertProductsToViewModel(pr))
			}

			vm.Products = listOfProducts
			vm.LoggedIn = true

		} else {
			remButton := req.FormValue("remove")
			remId, _ := strconv.Atoi(remButton)

			if remButton == "" {
				productName := req.FormValue("name")
				productType := req.FormValue("type")
				productDescription := req.FormValue("description")
				productPrice := req.FormValue("price")
				productImgUrl := req.FormValue("imageurl")

				_, fileErr := models.GetProductByName(productName)

				if fileErr != nil {
					inputProduct := models.Product{}
					inputProduct.SetName(productName)
					inputProduct.SetDescription(productDescription)
					inputProduct.SetImageUrl(productImgUrl)

					typ, _ := strconv.Atoi(productType)
					inputProduct.SetTyp(typ)

					price64, _ := strconv.ParseFloat(productPrice, 2)
					price := float32(price64)
					inputProduct.SetPrice(price)

					insertErr := models.InsertProduct(inputProduct)

					if insertErr == nil {
						http.Redirect(w, req, "/profile", http.StatusFound)
					} else {
						log.Fatal(insertErr.Error())
					}

				} else {
					http.Redirect(w, req, "/home", http.StatusFound)
				}
			} else {
				deleteErr := models.RemoveOrder(userId, remId)

				if deleteErr == nil {
					http.Redirect(w, req, "/profile", http.StatusFound)
				}
			}
		}

	} else {
		http.Redirect(w, req, "/login", http.StatusFound)
	}

	w.Header().Add("Content-Type", "text/html")
	this.template.Execute(responseWriter, vm)
	defer responseWriter.Close()
}
Beispiel #2
0
func ConvertProductsToViewModel(product models.Product) viewmodels.Product {

	result := viewmodels.Product{
		Id:          product.Id(),
		ImageUrl:    product.ImageUrl(),
		Name:        product.Name(),
		Type:        product.Typ(),
		Description: product.Description(),
		Price:       product.Price(),
	}

	return result
}
Beispiel #3
0
func Test_ConvertsProductToViewModel(t *testing.T) {
	product := models.Product{}
	product.SetName("the name")
	product.SetDescriptionShort("the short description")
	product.SetDescriptionLong("the long description")
	product.SetPricePerLitre(42.127)
	product.SetPricePer10Litre(27.314)
	product.SetOrigin("the origin")
	product.SetIsOrganic(true)
	product.SetImageUrl("the image URL")
	product.SetId(42)

	result := ConvertProductToViewModel(product)

	if product.Name() != result.Name {
		t.Fail()
	}
	if product.DescriptionShort() != result.DescriptionShort {
		t.Fail()
	}
	if product.DescriptionLong() != result.DescriptionLong {
		t.Fail()
	}
	if product.PricePerLitre() != result.PricePerLitre {
		t.Fail()
	}
	if product.PricePer10Litre() != result.PricePer10Litre {
		t.Fail()
	}
	if product.Origin() != result.Origin {
		t.Fail()
	}
	if product.IsOrganic() != result.IsOrganic {
		t.Fail()
	}
	if product.ImageUrl() != result.ImageUrl {
		t.Fail()
	}
	if product.Id() != result.Id {
		t.Fail()
	}
}
Beispiel #4
0
func EnsureData(w http.ResponseWriter, c appengine.Context) {
	q := datastore.NewQuery("Product").Ancestor(productKey(c)).Limit(1)
	products := make([]models.Product, 0, 1)
	if _, err := q.GetAll(c, &products); err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	var prodExists bool = false

	// if you only need e:
	for _, e := range products {
		c.Infof("Product:%v", e)
		prodExists = true
		break
	}

	if !prodExists {
		prod := new(models.Product)
		prod.Height = "6 - 8 inches"
		prod.HardinessZone = "4 - 9"
		prod.BloomTime = "May - June"
		prod.ImageUrl = "http://www.jamesgreenhouses.com/_code/_dyn_images/products/Strawberry-Gasana.JPG"
		prod.Description = "Everbearing. Great for containers! Or in the ground."
		prod.Name = "FRAGARIA (STRAWBERRY)  ‘GASANA’"
		prod.Class = "Fruit Crops"
		prod.Light = "Sun"
		prod.PlugSize = "72"
		prod.PriceEach = "$.68"

		InsertProduct(c, *prod, w)

		prod = new(models.Product)
		prod.Height = "6 - 8 inches"
		prod.HardinessZone = "4 - 9"
		prod.BloomTime = "May - June"
		prod.ImageUrl = "http://www.jamesgreenhouses.com/_code/_dyn_images/products/Strawberry-Gasana.JPG"
		prod.Description = "Everbearing. Great for containers! Or in the ground."
		prod.Name = "FRAGARIA (STRAWBERRY)  ‘GASANA’"
		prod.Class = "Fruit Crops"
		prod.Light = "Sun"
		prod.PlugSize = "72"
		prod.PriceEach = "$.68"

		InsertProduct(c, *prod, w)

		prod = new(models.Product)
		prod.Height = "9 - 12 inches"
		prod.HardinessZone = "4 - 8"
		prod.BloomTime = "Early Spring, Summer, Fall"
		prod.ImageUrl = "http://www.jamesgreenhouses.com/_code/_dyn_images/products/Achillea-Little-Moonshine-(2).JPG"
		prod.Description = "This exciting new introduction from Blooms of Bressingham has the bright yellow flowers of 'Moonshine' but at half the height! Great for containers and in the front of the border."
		prod.Name = "ACHILLEA  ‘LITTLE MOONSHINE’"
		prod.Class = "Hardy Perennials"
		prod.Light = "full sun"
		prod.PlugSize = "72"
		prod.PriceEach = "$.65"
		prod.Royalty = "$.16"
		prod.Colors = "Vibrant Yellow"
		prod.PatentStatus = "USPPAF"
		InsertProduct(c, *prod, w)

		prod = new(models.Product)
		prod.Height = "12 inches"
		prod.HardinessZone = "4 - 9"
		prod.BloomTime = "May - July"
		prod.ImageUrl = "http://www.jamesgreenhouses.com/_code/_dyn_images/products/Achillea-New-Vinage-Red-(4).JPG"
		prod.Description = "This new series from Ball Seed offers a compact and tidy habit with deep red flowers all summer."
		prod.Name = "ACHILLEA  NEW VINTAGE™ SERIES ‘RED’"
		prod.Class = "Hardy Perennials"
		prod.Light = "full sun"
		prod.PlugSize = "72"
		prod.PriceEach = "$.62"
		prod.Royalty = "$.08"
		prod.Colors = "Deep Red"
		prod.PatentStatus = "USPPAF"
		InsertProduct(c, *prod, w)
	}

}
Beispiel #5
0
func ConvertProductToViewModel(product models.Product) viewmodels.Product {
	result := viewmodels.Product{
		Name:             product.Name(),
		DescriptionShort: product.DescriptionShort(),
		DescriptionLong:  product.DescriptionLong(),
		PricePerLitre:    product.PricePerLitre(),
		PricePer10Litre:  product.PricePer10Litre(),
		Origin:           product.Origin(),
		IsOrganic:        product.IsOrganic(),
		ImageUrl:         product.ImageUrl(),
		Id:               product.Id(),
	}

	return result
}