special offers backoffice is ready now

This commit is contained in:
Senad Uka
2015-03-18 06:25:40 +01:00
parent 3b95500635
commit 658fe4931d
17 changed files with 208 additions and 1 deletions

View File

@@ -31,6 +31,8 @@ gem 'puma'
# for uploading images
gem 'cloudinary'
gem 'tabulous'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

View File

@@ -63,6 +63,7 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.8.0)
colored (1.2)
columnize (0.9.0)
debug_inspector (0.0.2)
debugger-linecache (1.2.0)
@@ -177,6 +178,9 @@ GEM
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
tabulous (2.1.3)
colored (~> 1.2.0)
rails (>= 3.0, < 5.0.0)
thor (0.19.1)
thread_safe (0.3.4)
tilt (1.4.1)
@@ -211,6 +215,7 @@ DEPENDENCIES
sass-rails (~> 5.0)
sdoc (~> 0.4.0)
spring
tabulous
turbolinks
uglifier (>= 1.3.0)
web-console (~> 2.0)

View File

@@ -0,0 +1,8 @@
class ReportsController < ApplicationController
def items_to_order
@items = Item.items_to_order
end
end

View File

@@ -0,0 +1,4 @@
class SpecialOffersController < ApplicationController
active_scaffold :"special_offer" do |conf|
end
end

View File

@@ -0,0 +1,2 @@
module SpecialOffersHelper
end

View File

@@ -3,8 +3,24 @@ class Item < ActiveRecord::Base
has_many :multi_media_descriptions
belongs_to :sub_category
belongs_to :supplier
belongs_to :special_offer
validates_presence_of :name, :description, :list_price, :current_input_price, :tags, :unit_id, :code, :sub_category_id, :weight, :supplier_id
# todo build a front end in backoffice (rails)
def self.items_to_order
return Item.find_by_sql(%Q{
select s.name as supplier, i.name as item, sum(iic.count) amount, i.current_input_price
from carts c
join item_in_carts iic on iic.cart_id = c.id
join items i on i.id = iic.item_id
join suppliers s on i.supplier_id = s.id
where c.confirmed and not (c.packed or c.delivered)
group by s.name, i.name, i.current_input_price
order by s.name, amount desc;
})
end
end

View File

@@ -0,0 +1,16 @@
class SpecialOffer < ActiveRecord::Base
belongs_to :item
belongs_to :category
belongs_to :section
belongs_to :sub_category
has_many :items
validates_presence_of :beginning, :ending, :image_url
validate :validate_beginning_before_ending
def validate_beginning_before_ending
if beginning && ending
errors.add(:ending, "End date must come after beginning date") if ending <= beginning
end
end
end

View File

@@ -0,0 +1,13 @@
Tabulous.setup do
tabs do
get_from_suppliers_tab do
text { 'From suppliers' }
link_path { '/' }
visible_when { true }
enabled_when { true }
active_when { in_action('any').of_controller('pictures') }
end
end
end

View File

@@ -1,5 +1,6 @@
Rails.application.routes.draw do
resources :special_offers do as_routes end
resources :suppliers do as_routes end
resources :places do as_routes end
resources :delivery_destinations do as_routes end

View File

@@ -0,0 +1,49 @@
require 'test_helper'
class SpecialOffersControllerTest < ActionController::TestCase
setup do
@special_offer = special_offers(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:special_offers)
end
test "should get new" do
get :new
assert_response :success
end
test "should create special_offer" do
assert_difference('SpecialOffer.count') do
post :create, special_offer: { beginning: @special_offer.beginning, category_id: @special_offer.category_id, checkout_page: @special_offer.checkout_page, ending: @special_offer.ending, image_url: @special_offer.image_url, item_id: @special_offer.item_id, search_result_page: @special_offer.search_result_page, section_id: @special_offer.section_id, start_page: @special_offer.start_page, sub_category_id: @special_offer.sub_category_id, thank_you_page: @special_offer.thank_you_page }
end
assert_redirected_to special_offer_path(assigns(:special_offer))
end
test "should show special_offer" do
get :show, id: @special_offer
assert_response :success
end
test "should get edit" do
get :edit, id: @special_offer
assert_response :success
end
test "should update special_offer" do
patch :update, id: @special_offer, special_offer: { beginning: @special_offer.beginning, category_id: @special_offer.category_id, checkout_page: @special_offer.checkout_page, ending: @special_offer.ending, image_url: @special_offer.image_url, item_id: @special_offer.item_id, search_result_page: @special_offer.search_result_page, section_id: @special_offer.section_id, start_page: @special_offer.start_page, sub_category_id: @special_offer.sub_category_id, thank_you_page: @special_offer.thank_you_page }
assert_redirected_to special_offer_path(assigns(:special_offer))
end
test "should destroy special_offer" do
assert_difference('SpecialOffer.count', -1) do
delete :destroy, id: @special_offer
end
assert_redirected_to special_offers_path
end
end

View File

@@ -0,0 +1,27 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
image_url: MyString
start_page: false
section_id: 1
category_id: 1
sub_category_id: 1
item_id: 1
thank_you_page: false
search_result_page: false
checkout_page: false
beginning: 2015-03-18
ending: 2015-03-18
two:
image_url: MyString
start_page: false
section_id: 1
category_id: 1
sub_category_id: 1
item_id: 1
thank_you_page: false
search_result_page: false
checkout_page: false
beginning: 2015-03-18
ending: 2015-03-18

View File

@@ -0,0 +1,7 @@
require 'test_helper'
class SpecialOfferTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@@ -0,0 +1,10 @@
class AddFlagsToCart < ActiveRecord::Migration
def change
add_column :carts, :confirmed, :boolean, default: false
add_column :carts, :packed, :boolean, default: false
add_column :carts, :canceled_on_check, :boolean, default: false
add_column :carts, :canceled_on_delivery, :boolean, default: false
add_column :carts, :delivered, :boolean, default: false
add_column :carts, :internal_note, :text
end
end

View File

@@ -0,0 +1,19 @@
class CreateSpecialOffers < ActiveRecord::Migration
def change
create_table :special_offers 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.timestamps null: false
end
end
end

View File

@@ -0,0 +1,5 @@
class AddSpecialOfferToItem < ActiveRecord::Migration
def change
add_column :items, :special_offer_id, :integer
end
end

View File

@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20150314033743) do
ActiveRecord::Schema.define(version: 20150318044933) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -23,6 +23,12 @@ ActiveRecord::Schema.define(version: 20150314033743) do
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|
@@ -89,6 +95,7 @@ ActiveRecord::Schema.define(version: 20150314033743) do
t.json "traits"
t.integer "supplier_id"
t.decimal "weight", precision: 5, scale: 3
t.integer "special_offer_id"
end
create_table "media_types", force: :cascade do |t|
@@ -115,6 +122,22 @@ ActiveRecord::Schema.define(version: 20150314033743) do
t.string "name"
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"