Credit/debit formatting, use filters for money formatting, use full page width for table

This commit is contained in:
Steve Pettitt
2016-01-28 22:42:45 +00:00
parent aa8457c40f
commit ccd66bba9c
8 changed files with 64 additions and 51 deletions

View File

@@ -0,0 +1,7 @@
Darkswarm.filter "formatBalance", (localizeCurrencyFilter, tFilter)->
# Convert number to string currency using injected currency configuration.
(balance) ->
if balance < 0
tFilter('credit') + ": " + localizeCurrencyFilter(Math.abs(balance))
else
tFilter('balance_due') + ": " + localizeCurrencyFilter(Math.abs(balance))

View File

@@ -4,4 +4,3 @@ Darkswarm.factory 'Orders', (orders_by_distributor, currencyConfig, CurrentHub,
# Populate Orders.orders from json in page.
@orders_by_distributor = orders_by_distributor
@currency_symbol = currencyConfig.symbol
# Sorting by most orders (most recent/frequent?)

View File

@@ -1,5 +1,5 @@
class Api::OrderSerializer < ActiveModel::Serializer
attributes :number, :completed_at, :total, :state, :shipment_state, :payment_state, :outstanding_balance, :total_money, :balance_money, :payments, :path
attributes :number, :completed_at, :total, :state, :shipment_state, :payment_state, :outstanding_balance, :payments, :path
has_many :payments, serializer: Api::PaymentSerializer
@@ -7,8 +7,8 @@ class Api::OrderSerializer < ActiveModel::Serializer
object.completed_at.blank? ? "" : object.completed_at.to_formatted_s(:long_ordinal)
end
def total_money
to_money(object.total)
def total
object.total.to_money.to_s
end
def shipment_state
@@ -23,17 +23,7 @@ class Api::OrderSerializer < ActiveModel::Serializer
object.state ? object.state.humanize : nil # Or a call to t() here?
end
def balance_money
to_money(object.outstanding_balance)
end
def path
spree.order_url(object.number, only_path: true)
end
private
def to_money(amount)
{currency_symbol:amount.to_money.currency_symbol, amount:amount.to_money.to_s}
end
end

View File

@@ -2,25 +2,25 @@
.columns.small-12.medium-12.large-12.fat
%table
%tr
%th{"bo-text" => "'transaction' | t"}
%th{"bo-text" => "'transaction_date' | t"}
%th{"bo-text" => "'payment_state' | t"}
%th{"bo-text" => "'shipping_state' | t"}
%th{"bo-text" => "'value' | t"}
%th{"bo-text" => "'balance' | t"}
%th.order1{"bo-text" => "'transaction' | t"}
%th.order2{"bo-text" => "'transaction_date' | t"}
%th.order3{"bo-text" => "'payment_state' | t"}
%th.order4{"bo-text" => "'shipping_state' | t"}
%th.order5{"bo-text" => "'value' | t"}
%th.order6{"bo-text" => "'balance' | t"}
%tbody{"ng-repeat" => "order in distributor.distributed_orders"}
%tr
%td
%td.order1
%a{"bo-href" => "order.path", "bo-text" => "('order' | t )+ ' ' + order.number"}
%td{"bo-text" => "order.completed_at"}
%td{"bo-text" => "order.payment_state | t"}
%td{"bo-text" => "order.shipment_state | t"}
%td.text-right{"bo-text" => "order.total_money.currency_symbol + order.total_money.amount"}
%td.text-right{"ng-class" => "{'credit' : order.outstanding_balance < 0, 'debit' : order.outstanding_balance > 0, 'paid' : order.outstanding_balance == 0}", "bo-text" => "order.balance_money.currency_symbol + order.balance_money.amount"}
%td.order2{"bo-text" => "order.completed_at"}
%td.order3{"bo-text" => "order.payment_state | t"}
%td.order4{"bo-text" => "order.shipment_state | t"}
%td.order5.text-right{"bo-text" => "order.total | localizeCurrency"}
%td.order6.text-right{"ng-class" => "{'credit' : order.outstanding_balance < 0, 'debit' : order.outstanding_balance > 0, 'paid' : order.outstanding_balance == 0}", "bo-text" => "order.outstanding_balance | localizeCurrency"}
%tr{"ng-repeat" => "payment in order.payments"}
%td{"bo-text" => "'Payment '+ payment.identifier"}
%td{"bo-text" => "payment.updated_at"}
%td{"bo-text" => "payment.payment_method"}
%td
%td.text-right {{order.total_money.currency_symbol}}&nbsp{{payment.amount}}
%td
%td.order1{"bo-text" => "'Payment '+ payment.identifier"}
%td.order2{"bo-text" => "payment.updated_at"}
%td.order3{"bo-text" => "payment.payment_method"}
%td.order4
%td.order5.text-right{"bo-text" => "payment.amount | localizeCurrency"}
%td.order6

View File

@@ -1,14 +1,13 @@
.row.active_table_row{"ng-click" => "toggle($event)", "ng-class" => "{'closed' : !open()}"}
.skinny-head
.row.active_table_row.skinny-head.margin-top{"ng-click" => "toggle($event)", "ng-class" => "{'closed' : !open()}"}
.columns.small-2
%span.margin-top
.columns.medium-2.large-2
%span.margin-top
%img{"bo-src" => "distributor.logo"}
.columns.small-10.medium-8.large-5
%span.margin-top
%strong{"bo-text" => "distributor.name"}
.columns.small-6.medium-3.large-3
%span.margin-top{"bo-text" => "('balance' | t) + ': ' + Orders.currency_symbol + distributor.balance", "ng-class" => "{'credit' : order.outstanding_balance < 0, 'debit' : order.outstanding_balance > 0, 'paid' : order.outstanding_balance == 0}"}
.columns.small-2.medium-2.large-2.text-right
%span.margin-top
%i{"ng-class" => "{'ofn-i_005-caret-down' : !open(), 'ofn-i_006-caret-up' : open()}"}
%img{"bo-src" => "distributor.logo"}
.columns.small-10.medium-5
%span.margin-top
%strong{"bo-text" => "distributor.name"}
.columns.small-8.small-offset-2.medium-3
%span.margin-top{"bo-text" => "distributor.balance | formatBalance", "ng-class" => "{'credit' : distributor.balance < 0, 'debit' : distributor.balance > 0, 'paid' : distributor.balance == 0}" }
-# %span.margin-top{"bo-text" => "('balance' | t) + ': ' + Orders.currency_symbol + distributor.balance", "ng-class" => "{'credit' : order.outstanding_balance < 0, 'debit' : order.outstanding_balance > 0, 'paid' : order.outstanding_balance == 0}"}
.columns.small-2.medium-2.text-right
%span.margin-top
%i{"ng-class" => "{'ofn-i_005-caret-down' : !open(), 'ofn-i_006-caret-up' : open()}"}

View File

@@ -679,5 +679,8 @@ Please follow the instructions there to make your enterprise visible on the Open
shipping_state: "Shipping status"
value: "Value"
"Balance due": "Balance due" # TODO: In /accounts better to pass the symbol and translate rather than humanize
balance_due: "Balance due"
credit: "Credit"
Paid: "Paid"
Ready: "Ready"
you_have_no_orders_yet: "You have no orders yet"

View File

@@ -189,6 +189,16 @@ FactoryGirl.define do
distributor { create(:distributor_enterprise) }
end
factory :order_with_credit_payment, parent: :completed_order_with_totals do
distributor { create(:distributor_enterprise)}
order_cycle { create(:simple_order_cycle) }
after(:create) do |order|
create(:payment, amount: order.total + 10000, order: order, state: "completed")
order.reload
end
end
factory :zone_with_member, :parent => :zone do
default_tax true

View File

@@ -11,22 +11,27 @@ feature %q{
let!(:user2) {create(:user)}
let!(:distributor1) { create(:distributor_enterprise) }
let!(:distributor2) { create(:distributor_enterprise) }
let!(:distributor_credit) { create(:distributor_enterprise) }
let!(:distributor_without_orders) { create(:distributor_enterprise) }
let!(:d1o1) { create(:completed_order_with_totals, distributor: distributor1, user_id: user.id, total: 10000)}
let!(:d1o2) { create(:completed_order_with_totals, distributor: distributor1, user_id: user.id, total: 5000)}
let!(:d2o1) { create(:completed_order_with_totals, distributor: distributor2, user_id: user.id)}
let!(:d1o1) { create(:completed_order_with_totals, distributor_id: distributor1.id, user_id: user.id, total: 10000)}
let!(:d1o2) { create(:completed_order_with_totals, distributor_id: distributor1.id, user_id: user.id, total: 5000)}
let!(:d2o1) { create(:completed_order_with_totals, distributor_id: distributor2.id, user_id: user.id)}
let!(:credit_order) { create(:order_with_credit_payment, distributor_id: distributor_credit.id, user_id: user.id)}
# let!(:credit_payment) { create(:payment, amount: 12000.00, order_id: credit_order.id)}
let!(:d1o1p) { create(:payment, order: d1o1)}
before do
credit_order.update!
login_as user
visit "/account"
end
it "shows all hubs that have been ordered from" do
it "shows all hubs that have been ordered from with balance or credit" do
expect(page).to have_content distributor1.name
expect(page).to have_content distributor2.name
expect(page).not_to have_content distributor_without_orders.name
expect(page).to have_content distributor1.name + " " + "Balance due"
expect(page).to have_content distributor_credit.name + " Credit"
end
it "reveals table of orders for distributors when clicked" do
@@ -43,7 +48,7 @@ feature %q{
end
it "displays an appropriate message" do
expect(page).to have_content "You have no orders yet"
expect(page).to have_content {t :you_have_no_orders_yet}
end
end