diff --git a/back-office/Gemfile b/back-office/Gemfile index e54f0da..3429cfa 100644 --- a/back-office/Gemfile +++ b/back-office/Gemfile @@ -56,3 +56,4 @@ group :development, :test do gem 'spring' end + diff --git a/back-office/app/controllers/reports_controller.rb b/back-office/app/controllers/reports_controller.rb index 65a845d..81996e0 100644 --- a/back-office/app/controllers/reports_controller.rb +++ b/back-office/app/controllers/reports_controller.rb @@ -1,8 +1,9 @@ class ReportsController < ApplicationController def items_to_order - @items = Item.items_to_order + @report = Item.items_to_order end end + \ No newline at end of file diff --git a/back-office/app/models/item.rb b/back-office/app/models/item.rb index f25908e..b84b34f 100644 --- a/back-office/app/models/item.rb +++ b/back-office/app/models/item.rb @@ -9,19 +9,48 @@ class Item < ActiveRecord::Base 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 + items_raw = Item.find_by_sql(%Q{ + select s.id as supplier_id, i.code as code, i.name as name, 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 + left join item_in_carts iic on iic.cart_id = c.id + left join items i on i.id = iic.item_id + left 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 + group by s.id, i.name, i.code, i.current_input_price order by s.name, amount desc; }) + + items_sorted = {} + suppliers_sorted = {} + + items_raw.each do |item| + items_sorted[item.supplier_id] ||= [] + suppliers_sorted[item.supplier_id] ||= item.supplier + items_sorted[item.supplier_id] << item + end + + report_items = [] + + complete_sum = 0 + + suppliers_sorted.each_pair do |key, value| + rep_sec = OpenStruct.new # report section + rep_sec.supplier = value + rep_sec.items = items_sorted[key] + rep_sec.sum_amount = rep_sec.items.reduce(0) do |sum, item| + sum + (item.current_input_price * item.amount) + end + complete_sum += rep_sec.sum_amount + + report_items << rep_sec + end + + full_report = OpenStruct.new + full_report.sections = report_items + full_report.full_sum = complete_sum + + return full_report end diff --git a/back-office/app/models/item_in_cart.rb b/back-office/app/models/item_in_cart.rb index 10e084e..4c863c1 100644 --- a/back-office/app/models/item_in_cart.rb +++ b/back-office/app/models/item_in_cart.rb @@ -7,6 +7,10 @@ class ItemInCart < ActiveRecord::Base validates :cart_id, presence: true def name - item.name + " " + count.to_s + " " + price.to_s + if item + item.name + " " + count.to_s + " " + price.to_s + else + " no item " + end end end diff --git a/back-office/app/views/reports/items_to_order.html.erb b/back-office/app/views/reports/items_to_order.html.erb index e69de29..22ce1d8 100644 --- a/back-office/app/views/reports/items_to_order.html.erb +++ b/back-office/app/views/reports/items_to_order.html.erb @@ -0,0 +1,32 @@ + +
<%= "report is nil" if @report.nil? %>
+ + + + + + + + + + <% unless @report.nil? %> + <% @report.sections.each do |section| %> + + <% section.items.each do |item| %> + + + + + + + + <% end %> + + <% end %> + + <% end %> +
CodeItem nameAmountPriceTotal
<%= section.supplier.name %>
<%= item.code %><%= item.name %><%= item.amount %><%= item.current_input_price %><%= item.current_input_price * item.amount %>
Sub-total: <%= section.sum_amount %>
Total: <%= @report.full_sum %>
diff --git a/back-office/config/dossier.yml b/back-office/config/dossier.yml new file mode 100644 index 0000000..5f7007d --- /dev/null +++ b/back-office/config/dossier.yml @@ -0,0 +1,86 @@ +# PostgreSQL. Versions 8.2 and up are supported. +# +# Install the pg driver: +# gem install pg +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: +# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config +# On Windows: +# gem install pg +# Choose the win32 build. +# Install PostgreSQL and put its /bin directory on your path. +# +# Configure Using Gemfile +# gem 'pg' +# +default: &default + adapter: postgresql + encoding: unicode + # For details on connection pooling, see rails configuration guide + # http://guides.rubyonrails.org/configuring.html#database-pooling + pool: 5 + +development: + <<: *default + database: ribica + + # The specified database role being used to connect to postgres. + # To create additional roles in postgres see `$ createuser --help`. + # When left blank, postgres will use the default role. This is + # the same name as the operating system user that initialized the database. + username: postgres + + # The password associated with the postgres role (username). + password: testni_hamo2 + + # Connect on a TCP socket. Omitted by default since the client uses a + # domain socket that doesn't need configuration. Windows does not have + # domain sockets, so uncomment these lines. + host: localhost + + # The TCP port the server listens on. Defaults to 5432. + # If your server runs on a different port number, change accordingly. + #port: 5432 + + # Schema search path. The server defaults to $user,public + #schema_search_path: myapp,sharedapp,public + + # Minimum log levels, in increasing order: + # debug5, debug4, debug3, debug2, debug1, + # log, notice, warning, error, fatal, and panic + # Defaults to warning. + #min_messages: notice + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: ribicabackoffice_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: ribica + username: postgres + password: testni_hamo2 + host: localhost diff --git a/back-office/config/routes.rb b/back-office/config/routes.rb index 75027dd..b210e89 100644 --- a/back-office/config/routes.rb +++ b/back-office/config/routes.rb @@ -18,6 +18,7 @@ Rails.application.routes.draw do resources :units do as_routes end resources :sub_categories do as_routes end resources :categories do as_routes end + get ':controller(/:action(/:id))' # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/front-api/db/schema.rb b/front-api/db/schema.rb index 1343116..034c4a9 100644 --- a/front-api/db/schema.rb +++ b/front-api/db/schema.rb @@ -126,8 +126,8 @@ ActiveRecord::Schema.define(version: 20150404114006) do t.datetime "updated_at", null: false t.string "tags" t.json "traits" - t.decimal "weight", precision: 5, scale: 3 t.integer "supplier_id" + t.decimal "weight", precision: 5, scale: 3 t.integer "delivery_time_estimation_id" t.integer "brand_id" end @@ -190,9 +190,11 @@ ActiveRecord::Schema.define(version: 20150404114006) do end create_table "sub_categories", force: :cascade do |t| - t.string "name" - t.integer "category_id" - t.integer "order" + t.string "name" + t.integer "category_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "order" end create_table "suppliers", force: :cascade do |t| diff --git a/front-ui/app/components/cart/cartPage.js b/front-ui/app/components/cart/cartPage.js index 4a094b0..4accbe9 100644 --- a/front-ui/app/components/cart/cartPage.js +++ b/front-ui/app/components/cart/cartPage.js @@ -34,10 +34,22 @@ var CartPage = React.createClass({ ) }); - console.log("bla :" , this.state.items.length); + var deliveryDestination = (); + + if (this.state.destinationValid) { + deliveryDestination = ( +
+ Na adresu {this.state.deliveryDestination.name}, + +
+ + ) + } + + + var cartTotal = (
-
diff --git a/front-ui/app/stores/cartStore.js b/front-ui/app/stores/cartStore.js index cf07d6f..8fab47a 100644 --- a/front-ui/app/stores/cartStore.js +++ b/front-ui/app/stores/cartStore.js @@ -213,7 +213,8 @@ var CartStore = _.extend({}, EventEmitter.prototype, { deliveryDestination: _deliveryDestination, deliveryDestinationErrors: _deliveryDestinationErrors, isDeliveryDestinationValid: isDeliveryDestinationValid(), - deliveryCosts: _deliveryCosts + deliveryCosts: _deliveryCosts, + destinationValid: isDeliveryDestinationValid() }; return state; },