shoppy 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +34 -0
- data/app/.DS_Store +0 -0
- data/app/api/apihelpers/api_auth.rb +50 -0
- data/app/api/base.rb +7 -0
- data/app/api/v1/auth.rb +57 -0
- data/app/api/v1/test.rb +15 -0
- data/app/api/v1/users.rb +50 -0
- data/app/api/v1/v1_api.rb +15 -0
- data/app/api/vo/user_vo.rb +7 -0
- data/app/assets/fonts/.DS_Store +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/images/.DS_Store +0 -0
- data/app/assets/images/Sorting icons.psd +0 -0
- data/app/assets/images/back_disabled.png +0 -0
- data/app/assets/images/back_enabled.png +0 -0
- data/app/assets/images/back_enabled_hover.png +0 -0
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/images/forward_disabled.png +0 -0
- data/app/assets/images/forward_enabled.png +0 -0
- data/app/assets/images/forward_enabled_hover.png +0 -0
- data/app/assets/images/shoppy.svg +34 -0
- data/app/assets/images/sort_asc.png +0 -0
- data/app/assets/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/sort_both.png +0 -0
- data/app/assets/images/sort_desc.png +0 -0
- data/app/assets/images/sort_desc_disabled.png +0 -0
- data/app/assets/images/spritemap.png +0 -0
- data/app/assets/images/spritemap@2x.png +0 -0
- data/app/assets/javascripts/.DS_Store +0 -0
- data/app/assets/javascripts/bootstrap.js +2114 -0
- data/app/assets/javascripts/bootstrap.min.js +6 -0
- data/app/assets/javascripts/jasny-bootstrap.min.js +6 -0
- data/app/assets/javascripts/jquery.dataTables.min.js +155 -0
- data/app/assets/javascripts/main.js +29 -0
- data/app/assets/javascripts/shoppy.js +31 -0
- data/app/assets/stylesheets/.DS_Store +0 -0
- data/app/assets/stylesheets/bootstrap.css +6203 -0
- data/app/assets/stylesheets/jasny-bootstrap.css +621 -0
- data/app/assets/stylesheets/jquery.dataTables.min.css +1 -0
- data/app/assets/stylesheets/jquery.dataTables_themeroller.css +330 -0
- data/app/assets/stylesheets/shoppy.css +23 -0
- data/app/assets/stylesheets/style.sass +79 -0
- data/app/controllers/.DS_Store +0 -0
- data/app/controllers/shoppy/accounts_controller.rb +102 -0
- data/app/controllers/shoppy/application_controller.rb +23 -0
- data/app/controllers/shoppy/brands_controller.rb +60 -0
- data/app/controllers/shoppy/cart_controller.rb +46 -0
- data/app/controllers/shoppy/categories_controller.rb +72 -0
- data/app/controllers/shoppy/concerns/.keep +0 -0
- data/app/controllers/shoppy/customer_addresses_controller.rb +90 -0
- data/app/controllers/shoppy/home_controller.rb +9 -0
- data/app/controllers/shoppy/inventories_controller.rb +62 -0
- data/app/controllers/shoppy/locations_controller.rb +80 -0
- data/app/controllers/shoppy/logs_controller.rb +9 -0
- data/app/controllers/shoppy/manufacturers_controller.rb +77 -0
- data/app/controllers/shoppy/options_controller.rb +63 -0
- data/app/controllers/shoppy/orders_controller.rb +130 -0
- data/app/controllers/shoppy/products_controller.rb +98 -0
- data/app/controllers/shoppy/reviews_controller.rb +70 -0
- data/app/controllers/shoppy/sessions_controller.rb +5 -0
- data/app/controllers/shoppy/settings_controller.rb +26 -0
- data/app/controllers/shoppy/shipments_controller.rb +125 -0
- data/app/controllers/shoppy/variants_controller.rb +104 -0
- data/app/helpers/shoppy/accounts_helper.rb +5 -0
- data/app/helpers/shoppy/application_helper.rb +19 -0
- data/app/helpers/shoppy/brands_helper.rb +4 -0
- data/app/helpers/shoppy/cart_helper.rb +66 -0
- data/app/helpers/shoppy/categories_helper.rb +4 -0
- data/app/helpers/shoppy/customer_addresses_helper.rb +4 -0
- data/app/helpers/shoppy/home_helper.rb +5 -0
- data/app/helpers/shoppy/inventories_helper.rb +53 -0
- data/app/helpers/shoppy/locations_helper.rb +4 -0
- data/app/helpers/shoppy/logs_helper.rb +4 -0
- data/app/helpers/shoppy/manufacturers_helper.rb +4 -0
- data/app/helpers/shoppy/options_helper.rb +43 -0
- data/app/helpers/shoppy/orders_helper.rb +61 -0
- data/app/helpers/shoppy/products_helper.rb +65 -0
- data/app/helpers/shoppy/reviews_helper.rb +4 -0
- data/app/helpers/shoppy/settings_helper.rb +5 -0
- data/app/helpers/shoppy/shipments_helper.rb +43 -0
- data/app/helpers/shoppy/variants_helper.rb +4 -0
- data/app/models/shoppy/.DS_Store +0 -0
- data/app/models/shoppy/admin.rb +5 -0
- data/app/models/shoppy/brand.rb +23 -0
- data/app/models/shoppy/cart_item.rb +13 -0
- data/app/models/shoppy/category.rb +50 -0
- data/app/models/shoppy/concerns/.DS_Store +0 -0
- data/app/models/shoppy/concerns/models/api_token_authenticatable.rb +36 -0
- data/app/models/shoppy/concerns/models/hashable.rb +60 -0
- data/app/models/shoppy/concerns/models/optionable.rb +60 -0
- data/app/models/shoppy/concerns/models/promotional.rb +36 -0
- data/app/models/shoppy/concerns/models/taggable.rb +44 -0
- data/app/models/shoppy/customer.rb +10 -0
- data/app/models/shoppy/customer_address.rb +44 -0
- data/app/models/shoppy/inventory.rb +18 -0
- data/app/models/shoppy/log.rb +8 -0
- data/app/models/shoppy/manufacturer.rb +35 -0
- data/app/models/shoppy/options_group.rb +57 -0
- data/app/models/shoppy/options_item.rb +18 -0
- data/app/models/shoppy/order.rb +15 -0
- data/app/models/shoppy/order_line.rb +16 -0
- data/app/models/shoppy/payment_method.rb +19 -0
- data/app/models/shoppy/product.rb +43 -0
- data/app/models/shoppy/review.rb +12 -0
- data/app/models/shoppy/setting.rb +11 -0
- data/app/models/shoppy/shipment.rb +11 -0
- data/app/models/shoppy/stock_location.rb +47 -0
- data/app/models/shoppy/user.rb +37 -0
- data/app/models/shoppy/variant.rb +48 -0
- data/app/views/.DS_Store +0 -0
- data/app/views/accounts/admins.html.erb +104 -0
- data/app/views/accounts/customers.html.erb +106 -0
- data/app/views/accounts/show.html.erb +50 -0
- data/app/views/brands/index.html.erb +85 -0
- data/app/views/brands/show.html.erb +31 -0
- data/app/views/cart/index.html.erb +52 -0
- data/app/views/categories/index.html.erb +84 -0
- data/app/views/categories/show.html.erb +29 -0
- data/app/views/customer_addresses/index.html.erb +112 -0
- data/app/views/customer_addresses/show.html.erb +50 -0
- data/app/views/devise/confirmations/new.html.erb +12 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +16 -0
- data/app/views/devise/passwords/new.html.erb +12 -0
- data/app/views/devise/registrations/edit.html.erb +29 -0
- data/app/views/devise/registrations/new.html.erb +23 -0
- data/app/views/devise/sessions/new.html.erb +33 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +12 -0
- data/app/views/home/index.html.erb +4 -0
- data/app/views/inventories/.DS_Store +0 -0
- data/app/views/inventories/index.html.erb +119 -0
- data/app/views/layouts/.DS_Store +0 -0
- data/app/views/layouts/shoppy.html.erb +27 -0
- data/app/views/locations/index.html.erb +120 -0
- data/app/views/locations/show.html.erb +58 -0
- data/app/views/logs/index.html.erb +49 -0
- data/app/views/manufacturers/index.html.erb +119 -0
- data/app/views/manufacturers/show.html.erb +62 -0
- data/app/views/options/index.html.erb +90 -0
- data/app/views/options/show.html.erb +32 -0
- data/app/views/orders/index.html.erb +174 -0
- data/app/views/orders/show.html.erb +74 -0
- data/app/views/products/index.html.erb +102 -0
- data/app/views/products/show.html.erb +112 -0
- data/app/views/reviews/index.html.erb +58 -0
- data/app/views/reviews/show.html.erb +46 -0
- data/app/views/settings/show.html.erb +50 -0
- data/app/views/shared/_custom_file_input.html.erb +12 -0
- data/app/views/shared/_flashes.html.erb +21 -0
- data/app/views/shared/_navigation.html.erb +66 -0
- data/app/views/shipments/index.html.erb +97 -0
- data/app/views/shipments/show.html.erb +84 -0
- data/app/views/variants/index.html.erb +119 -0
- data/app/views/variants/show.html.erb +114 -0
- data/bin/shoppy +183 -0
- data/config/routes.rb +124 -0
- data/db/.DS_Store +0 -0
- data/db/migrate/001__setup_hstore.rb +9 -0
- data/db/migrate/002__create_logs.rb +11 -0
- data/db/migrate/003__devise_create_users.rb +49 -0
- data/db/migrate/004__add_personal_info_to_user.rb +8 -0
- data/db/migrate/005__create_user_addresses.rb +16 -0
- data/db/migrate/006__create_categories.rb +11 -0
- data/db/migrate/007__create_brands.rb +10 -0
- data/db/migrate/008__create_manufacturers.rb +19 -0
- data/db/migrate/009__create_options_groups.rb +10 -0
- data/db/migrate/010__create_options_items.rb +10 -0
- data/db/migrate/011__create_products.rb +14 -0
- data/db/migrate/012__create_product_options_joint_table.rb +9 -0
- data/db/migrate/013__create_stock_locations.rb +18 -0
- data/db/migrate/014__create_variants.rb +12 -0
- data/db/migrate/015__add_promotional_to_variant.rb +8 -0
- data/db/migrate/016__create_inventories.rb +12 -0
- data/db/migrate/017__create_payment_methods.rb +9 -0
- data/db/migrate/018__create_cart_items.rb +12 -0
- data/db/migrate/019__create_orders.rb +11 -0
- data/db/migrate/020__create_order_lines.rb +14 -0
- data/db/migrate/021__add_type_to_user.rb +5 -0
- data/db/migrate/022__rename_user_address_to_customer_address.rb +5 -0
- data/db/migrate/023__create_shipments.rb +12 -0
- data/db/migrate/024__add_shipment_id_to_order_line.rb +5 -0
- data/db/migrate/025__change_user_gender_to_not_nullable.rb +5 -0
- data/db/migrate/026__add_category_id_to_product.rb +5 -0
- data/db/migrate/027__add_attachment_brand_image_to_brands.rb +11 -0
- data/db/migrate/028__add_delivery_date_to_shipment.rb +5 -0
- data/db/migrate/029__add_customer_info_to_order.rb +13 -0
- data/db/migrate/030__add_status_to_order.rb +5 -0
- data/db/migrate/031__add_default_address_to_user.rb +5 -0
- data/db/migrate/032__add_options_to_variant.rb +5 -0
- data/db/migrate/033__add_display_to_options_groups.rb +5 -0
- data/db/migrate/034__add_points_to_variant.rb +5 -0
- data/db/migrate/035__add_points_to_user.rb +5 -0
- data/db/migrate/036__define_ids.rb +25 -0
- data/db/migrate/037__create_seed_users.rb +13 -0
- data/db/migrate/038__add_name_to_customer_address.rb +5 -0
- data/db/migrate/039__create_reviews.rb +14 -0
- data/db/migrate/040__alter_table_customer_address.rb +5 -0
- data/db/migrate/041__create_settings.rb +23 -0
- data/lib/.DS_Store +0 -0
- data/lib/shoppy.rb +13 -0
- data/lib/shoppy/client.rb +53 -0
- data/lib/shoppy/engine.rb +4 -0
- data/lib/shoppy/version.rb +3 -0
- data/lib/tasks/shoppy_tasks.rake +4 -0
- data/lib/template/.gitignore +20 -0
- data/lib/template/Gemfile +46 -0
- data/lib/template/Gemfile.lock +218 -0
- data/lib/template/Rakefile +6 -0
- data/lib/template/app/assets/images/.keep +0 -0
- data/lib/template/app/assets/javascripts/application.js +13 -0
- data/lib/template/app/assets/stylesheets/application.css +15 -0
- data/lib/template/app/controllers/accounts_controller.rb +3 -0
- data/lib/template/app/controllers/application_controller.rb +3 -0
- data/lib/template/app/controllers/brands_controller.rb +3 -0
- data/lib/template/app/controllers/cart_controller.rb +3 -0
- data/lib/template/app/controllers/categories_controller.rb +3 -0
- data/lib/template/app/controllers/concerns/.keep +0 -0
- data/lib/template/app/controllers/customer_addresses_controller.rb +3 -0
- data/lib/template/app/controllers/home_controller.rb +3 -0
- data/lib/template/app/controllers/inventories_controller.rb +3 -0
- data/lib/template/app/controllers/locations_controller.rb +3 -0
- data/lib/template/app/controllers/logs_controller.rb +3 -0
- data/lib/template/app/controllers/manufacturers_controller.rb +3 -0
- data/lib/template/app/controllers/options_controller.rb +3 -0
- data/lib/template/app/controllers/orders_controller.rb +3 -0
- data/lib/template/app/controllers/products_controller.rb +3 -0
- data/lib/template/app/controllers/reviews_controller.rb +3 -0
- data/lib/template/app/controllers/sessions_controller.rb +3 -0
- data/lib/template/app/controllers/settings_controller.rb +3 -0
- data/lib/template/app/controllers/shipments_controller.rb +3 -0
- data/lib/template/app/controllers/variants_controller.rb +3 -0
- data/lib/template/app/helpers/.keep +0 -0
- data/lib/template/app/helpers/orders_helper.rb +4 -0
- data/lib/template/app/mailers/.keep +0 -0
- data/lib/template/app/models/.keep +0 -0
- data/lib/template/app/models/account.rb +4 -0
- data/lib/template/app/models/admin.rb +4 -0
- data/lib/template/app/models/brand.rb +3 -0
- data/lib/template/app/models/cart_item.rb +3 -0
- data/lib/template/app/models/category.rb +3 -0
- data/lib/template/app/models/concerns/.keep +0 -0
- data/lib/template/app/models/concerns/hashable.rb +4 -0
- data/lib/template/app/models/customer.rb +4 -0
- data/lib/template/app/models/customer_address.rb +3 -0
- data/lib/template/app/models/inventory.rb +3 -0
- data/lib/template/app/models/log.rb +3 -0
- data/lib/template/app/models/manufacturer.rb +3 -0
- data/lib/template/app/models/option_item.rb +3 -0
- data/lib/template/app/models/options_group.rb +3 -0
- data/lib/template/app/models/order.rb +3 -0
- data/lib/template/app/models/order_line.rb +3 -0
- data/lib/template/app/models/payment_method.rb +3 -0
- data/lib/template/app/models/product.rb +3 -0
- data/lib/template/app/models/review.rb +3 -0
- data/lib/template/app/models/setting.rb +3 -0
- data/lib/template/app/models/shipment.rb +3 -0
- data/lib/template/app/models/stock_location.rb +3 -0
- data/lib/template/app/models/variant.rb +3 -0
- data/lib/template/app/views/layouts/.keep +0 -0
- data/lib/template/bin/bundle +3 -0
- data/lib/template/bin/rails +8 -0
- data/lib/template/bin/rake +8 -0
- data/lib/template/bin/spring +18 -0
- data/lib/template/config.ru +4 -0
- data/lib/template/config/application.rb +23 -0
- data/lib/template/config/boot.rb +4 -0
- data/lib/template/config/database.yml +86 -0
- data/lib/template/config/environment.rb +5 -0
- data/lib/template/config/environments/development.rb +37 -0
- data/lib/template/config/environments/production.rb +78 -0
- data/lib/template/config/environments/test.rb +39 -0
- data/lib/template/config/initializers/assets.rb +8 -0
- data/lib/template/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/template/config/initializers/cookies_serializer.rb +3 -0
- data/lib/template/config/initializers/devise.rb +256 -0
- data/lib/template/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/template/config/initializers/inflections.rb +16 -0
- data/lib/template/config/initializers/mime_types.rb +4 -0
- data/lib/template/config/initializers/session_store.rb +3 -0
- data/lib/template/config/initializers/wrap_parameters.rb +14 -0
- data/lib/template/config/locales/devise.en.yml +59 -0
- data/lib/template/config/locales/en.yml +23 -0
- data/lib/template/config/routes.rb +3 -0
- data/lib/template/config/secrets.yml +22 -0
- data/lib/template/db/migrate/.keep +0 -0
- data/lib/template/db/seeds.rb +7 -0
- data/lib/template/lib/assets/.keep +0 -0
- data/lib/template/lib/tasks/.keep +0 -0
- data/lib/template/log/.keep +0 -0
- data/lib/template/public/404.html +67 -0
- data/lib/template/public/422.html +67 -0
- data/lib/template/public/500.html +66 -0
- data/lib/template/public/favicon.ico +0 -0
- data/lib/template/public/robots.txt +5 -0
- data/lib/template/test/controllers/.keep +0 -0
- data/lib/template/test/fixtures/.keep +0 -0
- data/lib/template/test/helpers/.keep +0 -0
- data/lib/template/test/integration/.keep +0 -0
- data/lib/template/test/mailers/.keep +0 -0
- data/lib/template/test/models/.keep +0 -0
- data/lib/template/test/test_helper.rb +10 -0
- data/lib/template/vendor/assets/javascripts/.keep +0 -0
- data/lib/template/vendor/assets/stylesheets/.keep +0 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +78 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/Gemfile.lock +217 -0
- data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/README.rdoc +28 -0
- data/test/shoppy/Users/alybadawy/exp/shoppy/lib/template/config.ru +4 -0
- data/test/shoppy_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +495 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Shoppy
|
|
2
|
+
class User < ActiveRecord::Base
|
|
3
|
+
# Include default devise modules. Others available are:
|
|
4
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
5
|
+
devise :database_authenticatable,
|
|
6
|
+
:registerable,
|
|
7
|
+
:recoverable,
|
|
8
|
+
:rememberable,
|
|
9
|
+
:trackable,
|
|
10
|
+
:validatable
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## STI
|
|
14
|
+
self.inheritance_column = :type
|
|
15
|
+
|
|
16
|
+
## Concerns
|
|
17
|
+
include Shoppy::Concerns::Models::ApiTokenAuthenticatable
|
|
18
|
+
|
|
19
|
+
## Filters
|
|
20
|
+
before_create :generate_api_token
|
|
21
|
+
before_save :caps
|
|
22
|
+
|
|
23
|
+
## Validators
|
|
24
|
+
validates :name, presence: true
|
|
25
|
+
validates :name, length: { in: 2..100, too_short: "must have at least %{count} letters", too_long: "must have at most %{count} letters" }
|
|
26
|
+
validates :phone, length: { in: 2..25, too_short: "must have at least %{count} letters", too_long: "must have at most %{count} letters" }, allow_blank: true
|
|
27
|
+
validates :gender, inclusion: {:in => ["Male", "Female", ""], message: "Must be 'Male', 'Female' or ''"}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
def caps
|
|
33
|
+
self.name = self.name.downcase.titleize
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Shoppy
|
|
2
|
+
class Variant < ActiveRecord::Base
|
|
3
|
+
## Relationships
|
|
4
|
+
belongs_to :product
|
|
5
|
+
has_many :inventories, dependent: :destroy
|
|
6
|
+
has_many :stock_locations, :through => :inventories
|
|
7
|
+
has_many :cart_items, dependent: :destroy
|
|
8
|
+
has_many :order_lines, dependent: :nullify
|
|
9
|
+
|
|
10
|
+
## Concerns
|
|
11
|
+
include Shoppy::Concerns::Models::Hashable
|
|
12
|
+
include Shoppy::Concerns::Models::Optionable
|
|
13
|
+
include Shoppy::Concerns::Models::Promotional
|
|
14
|
+
|
|
15
|
+
## Filters
|
|
16
|
+
before_create :update_options_groups
|
|
17
|
+
before_save :caps
|
|
18
|
+
|
|
19
|
+
## Validators
|
|
20
|
+
validates :name, presence: true
|
|
21
|
+
validates :name, length: { in: 2..100, too_short: "must have at least %{count} letters", too_long: "must have at most %{count} letters" }
|
|
22
|
+
validates :name, uniqueness: true
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def variant_details
|
|
26
|
+
"#{self.name} - #{self.price}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
def update_options_groups
|
|
31
|
+
if self.product == nil
|
|
32
|
+
errors.add(:product, "is blank!")
|
|
33
|
+
return false
|
|
34
|
+
else
|
|
35
|
+
if self.options.count == 0
|
|
36
|
+
ogs = self.product.options_groups
|
|
37
|
+
ogs.each do |og|
|
|
38
|
+
self.put_option(og.name, "")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
def caps
|
|
44
|
+
self.name = self.name.downcase.titleize
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
data/app/views/.DS_Store
ADDED
|
Binary file
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
|
|
3
|
+
<%= render 'shared/flashes' %>
|
|
4
|
+
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading clearfix">
|
|
7
|
+
<h3 class="panel-title pull-left">Manage Admin Accounts</h3>
|
|
8
|
+
<button type="button" class="btn btn-primary pull-right" data-toggle="modal" data-target="#newAdminModal">
|
|
9
|
+
<span class="glyphicon glyphicon-plus"></span> New Admin
|
|
10
|
+
</button>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="panel-body">
|
|
13
|
+
|
|
14
|
+
<% if @admins.count > 0 %>
|
|
15
|
+
<div class="clearfix">
|
|
16
|
+
<div class="form-group col-xs-2 table-show">
|
|
17
|
+
<label class="form-label">Show Rows:</label>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="form-group col-xs-5 table-search pull-right">
|
|
20
|
+
<label class="form-label">Search Admins </label>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<hr>
|
|
25
|
+
<table class="table filterTable ">
|
|
26
|
+
<thead>
|
|
27
|
+
<tr>
|
|
28
|
+
<th>#</th>
|
|
29
|
+
<th>Name</th>
|
|
30
|
+
<th>Email Address</th>
|
|
31
|
+
<th>Phone Number</th>
|
|
32
|
+
<th class="text-right">Actions</th>
|
|
33
|
+
</tr>
|
|
34
|
+
</thead>
|
|
35
|
+
<tbody>
|
|
36
|
+
<% @admins.each do |a| %>
|
|
37
|
+
<tr>
|
|
38
|
+
<td><%= a.id %></td>
|
|
39
|
+
<td><%= a.name %></td>
|
|
40
|
+
<td><%= a.email %></td>
|
|
41
|
+
<td><%= a.phone %></td>
|
|
42
|
+
<td class="text-right">
|
|
43
|
+
<%= link_to "<span class='glyphicon glyphicon-trash'></span>".html_safe, "/accounts/#{a.id}", method: :delete, data: { confirm: "Are you Sure you want to delete this user?" }, class: "btn btn-sm btn-danger", title: "Delete" %>
|
|
44
|
+
<%= link_to "<span class='glyphicon glyphicon-edit'></span>".html_safe, "/accounts/#{a.id}", class: "btn btn-sm btn-info", title: "Show/Edit" %>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<% end -%>
|
|
48
|
+
</tbody>
|
|
49
|
+
</table>
|
|
50
|
+
<% else %>
|
|
51
|
+
<h4 class="text-center light-color">No Admins Yet</h4>
|
|
52
|
+
<% end -%>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<!-- Modal -->
|
|
58
|
+
<div class="modal fade" id="newAdminModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
59
|
+
<div class="modal-dialog">
|
|
60
|
+
<div class="modal-content">
|
|
61
|
+
<div class="modal-header">
|
|
62
|
+
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
|
63
|
+
<h4 class="modal-title" id="myModalLabel">Add a New Admin</h4>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<%= form_tag("/accounts/admins", method: "post", role: "form", autocomplete: "off") do %>
|
|
67
|
+
<div class="modal-body">
|
|
68
|
+
<div class="form-group">
|
|
69
|
+
<label class="control-label">Admin Name *</label> <br>
|
|
70
|
+
<%= text_field_tag(:name, nil, class: "form-control") %>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="row">
|
|
73
|
+
<div class="form-group col-xs-6">
|
|
74
|
+
<label class="control-label">Admin Email *</label> <br>
|
|
75
|
+
<%= email_field_tag(:email, nil, class: "form-control") %>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="form-group col-xs-6">
|
|
78
|
+
<label class="control-label">Admin Phone</label> <br>
|
|
79
|
+
<%= text_field_tag(:phone, nil, class: "form-control") %>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="row">
|
|
83
|
+
<div class="form-group col-xs-6">
|
|
84
|
+
<label class="control-label">Admin Password *</label> <br>
|
|
85
|
+
<%= password_field_tag(:password, nil, class: "form-control") %>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="form-group col-xs-6">
|
|
88
|
+
<label class="control-label">Password Confirmation *</label> <br>
|
|
89
|
+
<%= password_field_tag(:password_confirmation, nil, class: "form-control") %>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="form-group">
|
|
93
|
+
<label class="control-label">Admin Gender</label> <br>
|
|
94
|
+
<%= select_tag :gender, options_for_select(["", "Male", "Female"], ""), { :class => 'form-control' } %>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="modal-footer">
|
|
98
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
99
|
+
<%= submit_tag("Add New Admin", class: "btn btn-info") %>
|
|
100
|
+
</div>
|
|
101
|
+
<% end %>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
|
|
3
|
+
<%= render 'shared/flashes' %>
|
|
4
|
+
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading clearfix">
|
|
7
|
+
<h3 class="panel-title pull-left">Manage Customer Accounts</h3>
|
|
8
|
+
<button type="button" class="btn btn-primary pull-right" data-toggle="modal" data-target="#newCustomerModal">
|
|
9
|
+
<span class="glyphicon glyphicon-plus"></span> New Customer
|
|
10
|
+
</button>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="panel-body">
|
|
13
|
+
|
|
14
|
+
<% if @customers.count > 0 %>
|
|
15
|
+
<div class="clearfix">
|
|
16
|
+
<div class="form-group col-xs-2 table-show">
|
|
17
|
+
<label class="form-label">Show Rows:</label>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="form-group col-xs-5 table-search pull-right">
|
|
20
|
+
<label class="form-label">Search Customers </label>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<hr>
|
|
24
|
+
<table class="table filterTable ">
|
|
25
|
+
<thead>
|
|
26
|
+
<tr>
|
|
27
|
+
<th>#</th>
|
|
28
|
+
<th>Name</th>
|
|
29
|
+
<th>Email Address</th>
|
|
30
|
+
<th>Phone Number</th>
|
|
31
|
+
<th class="text-right">Actions</th>
|
|
32
|
+
</tr>
|
|
33
|
+
</thead>
|
|
34
|
+
<tbody>
|
|
35
|
+
<% @customers.each do |c| %>
|
|
36
|
+
<tr>
|
|
37
|
+
<td><%= c.id %></td>
|
|
38
|
+
<td><%= c.name %></td>
|
|
39
|
+
<td><%= c.email %></td>
|
|
40
|
+
<td><%= c.phone %></td>
|
|
41
|
+
<td class="text-right">
|
|
42
|
+
<%= link_to "<span class='glyphicon glyphicon-trash'></span>".html_safe, "/accounts/#{c.id}", method: :delete, data: { confirm: "Are you Sure you want to delete this user?" }, class: "btn btn-sm btn-danger", title: "Delete" %>
|
|
43
|
+
<%= link_to "<span class='glyphicon glyphicon-edit'></span>".html_safe, "/accounts/#{c.id}", class: "btn btn-sm btn-info", title: "Show/Edit" %>
|
|
44
|
+
<%= link_to "<span class='glyphicon glyphicon-map-marker'></span>".html_safe, "/accounts/#{c.id}/addresses", class: "btn btn-sm btn-success", title: "Addresses" %>
|
|
45
|
+
<%= link_to "<span class='glyphicon glyphicon-usd'></span>".html_safe, "/accounts/#{c.id}/orders", class: "btn btn-sm btn-success", title: "Orders" %>
|
|
46
|
+
<%= link_to "<span class='glyphicon glyphicon-shopping-cart'></span>".html_safe, "/accounts/#{c.id}/cart", class: "btn btn-sm btn-success", title: "Cart" %>
|
|
47
|
+
</td>
|
|
48
|
+
</tr>
|
|
49
|
+
<% end -%>
|
|
50
|
+
</tbody>
|
|
51
|
+
</table>
|
|
52
|
+
<% else %>
|
|
53
|
+
<h4 class="text-center light-color">No Customers Yet</h4>
|
|
54
|
+
<% end -%>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<!-- Modal -->
|
|
60
|
+
<div class="modal fade" id="newCustomerModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
61
|
+
<div class="modal-dialog">
|
|
62
|
+
<div class="modal-content">
|
|
63
|
+
<div class="modal-header">
|
|
64
|
+
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
|
65
|
+
<h4 class="modal-title" id="myModalLabel">Add a New Customer</h4>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<%= form_tag("/accounts/customers", method: "post", role: "form", autocomplete: "off") do %>
|
|
69
|
+
<div class="modal-body">
|
|
70
|
+
<div class="form-group">
|
|
71
|
+
<label class="control-label">Customer Name *</label> <br>
|
|
72
|
+
<%= text_field_tag(:name, nil, class: "form-control") %>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="row">
|
|
75
|
+
<div class="form-group col-xs-6">
|
|
76
|
+
<label class="control-label">Customer Email *</label> <br>
|
|
77
|
+
<%= email_field_tag(:email, nil, class: "form-control") %>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="form-group col-xs-6">
|
|
80
|
+
<label class="control-label">Customer Phone</label> <br>
|
|
81
|
+
<%= text_field_tag(:phone, nil, class: "form-control") %>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
<div class="row">
|
|
85
|
+
<div class="form-group col-xs-6">
|
|
86
|
+
<label class="control-label">Customer Password *</label> <br>
|
|
87
|
+
<%= password_field_tag(:password, nil, class: "form-control") %>
|
|
88
|
+
</div>
|
|
89
|
+
<div class="form-group col-xs-6">
|
|
90
|
+
<label class="control-label">Password Confirmation *</label> <br>
|
|
91
|
+
<%= password_field_tag(:password_confirmation, nil, class: "form-control") %>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
<div class="form-group">
|
|
95
|
+
<label class="control-label">Customer Gender</label> <br>
|
|
96
|
+
<%= select_tag :gender, options_for_select(["", "Male", "Female"], ""), { :class => 'form-control' } %>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="modal-footer">
|
|
100
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
101
|
+
<%= submit_tag("Add New Customer", class: "btn btn-info") %>
|
|
102
|
+
</div>
|
|
103
|
+
<% end %>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<%= render 'shared/flashes' %>
|
|
3
|
+
<div class="panel panel-default">
|
|
4
|
+
<div class="panel-heading">
|
|
5
|
+
<h3 class="panel-title"><%= @user.name %> details</h3>
|
|
6
|
+
</div>
|
|
7
|
+
<%= form_for @user, method: :put, url: {action: "edit"}, class: "form-horizontal" do |f| %>
|
|
8
|
+
<div class="panel-body">
|
|
9
|
+
<div class="form-group">
|
|
10
|
+
<%= f.label :name, "Name *", class: "control-label" %>
|
|
11
|
+
<%= f.text_field :name, class: "form-control" %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="form-group">
|
|
14
|
+
<%= f.label :email, "Email *", class: "control-label" %>
|
|
15
|
+
<%= f.email_field :email, :required => true, class: "form-control" %>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="form-group">
|
|
18
|
+
<%= f.label :phone, "Phone Number", class: "control-label" %>
|
|
19
|
+
<%= f.telephone_field :phone, class: "form-control" %>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="form-group">
|
|
22
|
+
<%= f.label :phone, "Gender", class: "control-label" %>
|
|
23
|
+
<%= f.select :gender, options_for_select(["", "Male", "Female"], f.object.gender), { :include_blank=> false }, { :class => 'form-control' } %>
|
|
24
|
+
</div>
|
|
25
|
+
<hr>
|
|
26
|
+
<div class="form-group">
|
|
27
|
+
<%= f.label :password, "Password", class: "control-label" %>
|
|
28
|
+
<%= f.text_field :password, class: 'form-control' %>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="form-group">
|
|
31
|
+
<%= f.label :password_confirmation, "Password confirmation", class: "control-label" %>
|
|
32
|
+
<%= f.text_field :password_confirmation, class: 'form-control' %>
|
|
33
|
+
</div>
|
|
34
|
+
<h5>Leave blank to keep current password</h5>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="panel-footer clearfix">
|
|
37
|
+
<div class="pull-right">
|
|
38
|
+
<%= link_to "<span class='glyphicon glyphicon-trash'></span> Delete".html_safe, "/accounts/#{@user.id}?view=show", method: :delete, data: { confirm: "Are you Sure you want to delete this user?" }, class: "btn btn-danger", title: "Delete" %>
|
|
39
|
+
<%= f.submit "Update", class: "btn btn-success" %>
|
|
40
|
+
</div>
|
|
41
|
+
<% if @user.type == "Admin" %>
|
|
42
|
+
<a class="btn btn-default pull-left" href="/accounts/admins" role="button">Back to admins</a>
|
|
43
|
+
<% else %>
|
|
44
|
+
<a class="btn btn-default pull-left" href="/accounts/customers" role="button">Back to Customers</a>
|
|
45
|
+
<% end %>
|
|
46
|
+
</div>
|
|
47
|
+
<% end %>
|
|
48
|
+
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
|
|
3
|
+
<%= render 'shared/flashes' %>
|
|
4
|
+
|
|
5
|
+
<div class="panel panel-default">
|
|
6
|
+
<div class="panel-heading clearfix">
|
|
7
|
+
<h3 class="panel-title pull-left">Manage Brands</h3>
|
|
8
|
+
<button type="button" class="btn btn-primary pull-right" data-toggle="modal" data-target="#newBrandModal">
|
|
9
|
+
<span class="glyphicon glyphicon-plus"></span> New Brand
|
|
10
|
+
</button>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="panel-body">
|
|
14
|
+
<% if @brands.count > 0 %>
|
|
15
|
+
|
|
16
|
+
<div class="clearfix">
|
|
17
|
+
<div class="form-group col-xs-2 table-show">
|
|
18
|
+
<label class="form-label">Show Rows:</label>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="form-group col-xs-5 table-search pull-right">
|
|
21
|
+
<label class="form-label">Search Brands </label>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<hr>
|
|
26
|
+
|
|
27
|
+
<table class="table filterTable">
|
|
28
|
+
<thead>
|
|
29
|
+
<tr>
|
|
30
|
+
<th>#</th>
|
|
31
|
+
<th>Brand Name</th>
|
|
32
|
+
<th>Brand Logo</th>
|
|
33
|
+
<th class="text-right">Actions</th>
|
|
34
|
+
</tr>
|
|
35
|
+
</thead>
|
|
36
|
+
<tbody>
|
|
37
|
+
<% @brands.each do |b| %>
|
|
38
|
+
<tr>
|
|
39
|
+
<td><%= b.id %></td>
|
|
40
|
+
<td><%= b.name %></td>
|
|
41
|
+
<td><%= image_tag(b.brand_image.url, height: "50") %></td>
|
|
42
|
+
<td class="text-right">
|
|
43
|
+
<%= link_to "<span class='glyphicon glyphicon-trash'></span>".html_safe, "/products/brands/#{b.id}", method: :delete, data: { confirm: "Are you Sure you want to delete this brand?" }, class: "btn btn-sm btn-danger", title: "Delete" %>
|
|
44
|
+
<%= link_to "<span class='glyphicon glyphicon-edit'></span>".html_safe, "/products/brands/#{b.id}", class: "btn btn-sm btn-info", title: "Show/Edit" %>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<% end -%>
|
|
48
|
+
</tbody>
|
|
49
|
+
</table>
|
|
50
|
+
<% else %>
|
|
51
|
+
<h4 class="text-center light-color">No Brands Yet</h4>
|
|
52
|
+
<% end -%>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<!-- Modal -->
|
|
58
|
+
<div class="modal fade" id="newBrandModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
59
|
+
<div class="modal-dialog">
|
|
60
|
+
<div class="modal-content">
|
|
61
|
+
<div class="modal-header">
|
|
62
|
+
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
|
63
|
+
<h4 class="modal-title" id="myModalLabel">Add a New Brand</h4>
|
|
64
|
+
</div>
|
|
65
|
+
<%= form_for @brand, method: :post, url: {action: "new"} do |f| %>
|
|
66
|
+
<div class="modal-body">
|
|
67
|
+
<div class="form-group">
|
|
68
|
+
<label class="control-label">Brand Name *</label> <br>
|
|
69
|
+
<%= f.text_field :name, class: "form-control" %>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="form-group">
|
|
72
|
+
<label class="control-label">Brand Logo *</label> <br>
|
|
73
|
+
<%= render partial: "shared/custom_file_input", locals: {file: f, name: :brand_image} %>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div class="modal-footer">
|
|
77
|
+
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
78
|
+
<%= f.submit "Create Brand", class: "btn btn-info" %>
|
|
79
|
+
</div>
|
|
80
|
+
<% end %>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<%= render 'shared/flashes' %>
|
|
3
|
+
<div class="panel panel-default">
|
|
4
|
+
<div class="panel-heading">
|
|
5
|
+
<h3 class="panel-title"><%= @brand.name %> details</h3>
|
|
6
|
+
</div>
|
|
7
|
+
<%= form_for @brand, method: :put, url: {action: "edit"}, class: "form-horizontal" do |f| %>
|
|
8
|
+
<div class="panel-body">
|
|
9
|
+
<div class="form-group">
|
|
10
|
+
<%= f.label :name, "Name *", class: "control-label" %>
|
|
11
|
+
<%= f.text_field :name, class: "form-control" %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="form-group">
|
|
14
|
+
<%= f.label :brand_image, "Logo *", class: "control-label" %><br>
|
|
15
|
+
<%= render partial: "shared/custom_file_input", locals: {file: f, name: :brand_image} %>
|
|
16
|
+
<br>
|
|
17
|
+
<%= image_tag(@brand.brand_image.url, height: "100") %>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
</div>
|
|
21
|
+
<div class="panel-footer clearfix">
|
|
22
|
+
<div class="pull-right">
|
|
23
|
+
<%= link_to "<span class='glyphicon glyphicon-trash'></span> Delete".html_safe, "/products/brands/#{@brand.id}?view=show", method: :delete, data: { confirm: "Are you Sure you want to delete this brand?" }, class: "btn btn-danger", title: "Delete" %>
|
|
24
|
+
<%= f.submit "Update", class: "btn btn-success" %>
|
|
25
|
+
</div>
|
|
26
|
+
<a class="btn btn-default pull-left" href="/products/brands" role="button">Back to Brands</a>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|