diff --git a/front-api/db/migrate/20150319104317_create_children.rb b/front-api/db/migrate/20150319104317_create_children.rb index 5c23449..423b113 100644 --- a/front-api/db/migrate/20150319104317_create_children.rb +++ b/front-api/db/migrate/20150319104317_create_children.rb @@ -5,6 +5,7 @@ class CreateChildren < ActiveRecord::Migration t.integer :gender t.date :date_of_birth t.integer :user_id + t.boolean :on_the_way end end end diff --git a/front-api/db/schema.rb b/front-api/db/schema.rb index d0a31cd..e69de29 100644 --- a/front-api/db/schema.rb +++ b/front-api/db/schema.rb @@ -1,184 +0,0 @@ -# encoding: UTF-8 -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended that you check this file into your version control system. - -ActiveRecord::Schema.define(version: 20150319104317) do - - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - - create_table "carts", force: :cascade do |t| - t.integer "user_id" - t.boolean "ordered", default: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "anonymous_id_string" - t.integer "delivery_destination_id" - t.boolean "confirmed" - t.boolean "packed" - t.boolean "canceled_on_check" - t.boolean "canceled_on_delivery" - t.boolean "delivered" - t.text "internal_note" - end - - create_table "categories", force: :cascade do |t| - t.string "name" - t.integer "section_id" - t.string "image_url" - t.integer "order" - end - - create_table "children", force: :cascade do |t| - t.string "name" - t.integer "gender" - t.date "date_of_birth" - t.integer "user_id" - end - - create_table "delivery_destinations", force: :cascade do |t| - t.string "name" - t.string "address" - t.string "place" - t.string "postal_code" - t.string "phone" - t.string "email" - t.text "note" - t.boolean "email_verified" - t.boolean "phone_verified" - t.string "phone_verification_code" - t.string "email_verification_code" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "user_id" - t.string "anonymous_id_string" - end - - create_table "filter_criteria", force: :cascade do |t| - t.string "title" - t.string "field_name" - t.integer "type" - t.string "owner_type" - t.integer "owner_id" - end - - create_table "filter_criteria_values", force: :cascade do |t| - t.string "filter_text" - t.string "filter_value" - t.integer "filter_criteria_id" - end - - create_table "item_in_carts", force: :cascade do |t| - t.integer "cart_id" - t.integer "item_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "count" - t.decimal "price" - end - - create_table "items", force: :cascade do |t| - t.string "name" - t.string "code", limit: 10 - t.decimal "current_input_price", precision: 5, scale: 2 - t.decimal "list_price", precision: 5, scale: 2 - t.integer "unit_id" - t.decimal "units_in_pack", precision: 5, scale: 3 - t.text "description" - t.integer "sub_category_id" - t.integer "stock" - t.boolean "on_display" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "tags" - t.json "traits" - t.integer "supplier_id" - t.decimal "weight", precision: 5, scale: 3 - t.integer "special_offer_id" - t.integer "supplier_id" - end - - create_table "media_types", force: :cascade do |t| - t.string "name" - end - - create_table "multi_media_descriptions", force: :cascade do |t| - t.string "url" - t.integer "item_id" - t.integer "media_type_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "places", force: :cascade do |t| - t.string "postal_code" - t.decimal "delivery_price" - t.string "name" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "sections", force: :cascade do |t| - t.string "name" - t.integer "order" - end - - create_table "special_offers", force: :cascade do |t| - t.string "image_url" - t.boolean "start_page" - t.integer "section_id" - t.integer "category_id" - t.integer "sub_category_id" - t.integer "item_id" - t.boolean "thank_you_page" - t.boolean "search_result_page" - t.boolean "checkout_page" - t.date "beginning" - t.date "ending" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "sub_categories", force: :cascade do |t| - t.string "name" - t.integer "category_id" - t.integer "order" - end - - create_table "suppliers", force: :cascade do |t| - t.string "name" - t.string "address" - t.string "postal_code" - t.string "town" - t.string "phone" - t.string "contact_person" - t.string "email" - t.text "note" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "units", force: :cascade do |t| - t.string "name" - t.string "short_name", limit: 4 - t.string "description_suffix" - t.string "number_of_pieces_suffix" - end - - create_table "users", force: :cascade do |t| - t.string "first_name" - t.string "last_name" - t.string "email" - t.string "password_digest" - end - -end diff --git a/front-api/models/user.rb b/front-api/models/user.rb index a0b9d6c..a30fd16 100644 --- a/front-api/models/user.rb +++ b/front-api/models/user.rb @@ -4,11 +4,13 @@ class User < ActiveRecord::Base accepts_nested_attributes_for :children - has_secure_password - validates_presence_of :first_name, :last_name, :password, :email, :password_confirmation + has_secure_password :validations => false - validates :email, :uniqueness => {:case_sensitive => false, :message => "Email already exists!"}, - format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, message: "invalid email" } + validates :first_name, :presence =>{ :message => "Ime je obavezno polje." } + validates :last_name, :presence=>{ :message => "Prezime je obavezno polje." } - validates :password, confirmation: true, length: { in:6..20, too_short: 'password needs to be at least 6 characters long' } + validates :email, :uniqueness => {:case_sensitive => false, :message => "Već postoji registrovani korisnik sa email adresom koju ste unijeli."}, + format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, message: "Neispravna email adresa." } + + validates :password, :confirmation => { :message=> "Šifre se ne podudaraju.", :on => :create }, length: { too_long:'Šifra mora biti manja od 20 karaktera.', in:6..20, too_short: 'Šifra mora biti minimalne dužine od 6 karaktera.' } end diff --git a/front-ui/app/components/account/register.js b/front-ui/app/components/account/register.js index 237fa4d..8fa7a17 100644 --- a/front-ui/app/components/account/register.js +++ b/front-ui/app/components/account/register.js @@ -18,44 +18,75 @@ var Register = React.createClass({ email: '', password: '', passwordConfirmation: '', - registration: UserStore.getRegistrationState() + registration: UserStore.getRegistrationState(), + myBabyDOBDay: -1, + myBabyDOBMonth: -1, + myBabyDOBYear: -1, + myBabyOnTheWay: false, + loginState : UserStore.getLoginState() }; }, - myBabyChange: function() { + myBabyChange: function(e) { this.setState({ - myBabyDetailsVisible: true + myBabyDetailsVisible: true, + myBabyOnTheWay: (e.currentTarget.value === "1" ? true: false) }); }, renderMonthSelector: function() { var months = ['Januar', 'Februar', 'Mart', 'April', 'Maj', 'Juni', 'Juli','August','Septembar', 'Oktobar','Novembar','Decembar']; - var monthsSelect = []; - for(var i = 0; i < months.length; i++) { - monthsSelect.push() + var monthsSelect = []; + for(var i = 1; i <= months.length; i++) { + monthsSelect.push() } - return () + return () }, renderYearSelector: function() { var currentYear = (new Date().getFullYear()); var years = []; - years.push() + years.push() for(var i = 0; i < 12; i++) { years.push() } - return () + return () }, renderDaySelector: function() { var days = []; - days.push() + days.push() for(var i = 1; i <= 31; i++) { days.push() } - return () + return () + }, + onBabyDOBDayChange: function(e) { + this.setState({ + myBabyDOBDay: e.currentTarget.value + }); + }, + onBabyDOBMonthChange: function(e) { + this.setState({ + myBabyDOBMonth: e.currentTarget.value + }); + }, + onBabyDOBYearChange: function(e) { + this.setState({ + myBabyDOBYear: e.currentTarget.value + }); + }, + myBabyNameChange: function(e) { + this.setState({ + babyName: e.currentTarget.value + }); + }, + myBabyGenderChange: function(e) { + this.setState({ + babyGender: e.currentTarget.value + }); }, renderBabyDetails: function() { if (!this.state.myBabyDetailsVisible) { @@ -70,16 +101,16 @@ var Register = React.createClass({