Merge pull request #3963 from luisramos0/hide_invoices

Hide invoices feature
This commit is contained in:
Luis Ramos
2019-07-09 14:20:50 +01:00
committed by GitHub
7 changed files with 208 additions and 28 deletions

View File

@@ -68,7 +68,6 @@ Metrics/LineLength:
- app/helpers/shop_helper.rb
- app/helpers/spree/admin/base_helper_decorator.rb
- app/helpers/spree/admin/navigation_helper_decorator.rb
- app/helpers/spree/admin/orders_helper_decorator.rb
- app/helpers/spree/orders_helper.rb
- app/jobs/subscription_confirm_job.rb
- app/mailers/subscription_mailer.rb
@@ -427,7 +426,6 @@ Metrics/AbcSize:
- app/helpers/checkout_helper.rb
- app/helpers/i18n_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/orders_helper_decorator.rb
- app/helpers/spree/orders_helper.rb
- app/jobs/subscription_placement_job.rb
- app/mailers/producer_mailer.rb
@@ -568,7 +566,6 @@ Metrics/CyclomaticComplexity:
- app/helpers/checkout_helper.rb
- app/helpers/i18n_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/orders_helper_decorator.rb
- app/models/enterprise.rb
- app/models/enterprise_relationship.rb
- app/models/product_import/entry_processor.rb
@@ -598,7 +595,6 @@ Metrics/PerceivedComplexity:
- app/helpers/checkout_helper.rb
- app/helpers/i18n_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/orders_helper_decorator.rb
- app/models/enterprise_relationship.rb
- app/models/product_import/entry_processor.rb
- app/models/product_import/entry_validator.rb
@@ -644,7 +640,6 @@ Metrics/MethodLength:
- app/controllers/user_registrations_controller.rb
- app/helpers/checkout_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/orders_helper_decorator.rb
- app/jobs/subscription_placement_job.rb
- app/mailers/producer_mailer.rb
- app/models/column_preference.rb

View File

@@ -2,27 +2,102 @@ module Spree
module Admin
module OrdersHelper
def order_links(order)
@order ||= order
links = []
links << { name: t(:edit_order), url: edit_admin_order_path(order), icon: 'icon-edit' } unless action_name == "edit"
if @order.complete?
links << { name: t(:resend_confirmation), url: resend_admin_order_path(order), icon: 'icon-email', method: 'post', confirm: t(:confirm_resend_order_confirmation) }
if @order.distributor.can_invoice?
links << { name: t(:send_invoice), url: invoice_admin_order_path(order), icon: 'icon-email', confirm: t(:confirm_send_invoice) }
else
links << { name: t(:send_invoice), url: "#", icon: 'icon-email', confirm: t(:must_have_valid_business_number, enterprise_name: order.distributor.name) }
end
links << { name: t(:print_invoice), url: print_admin_order_path(order), icon: 'icon-print', target: "_blank" }
if Spree::Config.enable_receipt_printing?
links << { name: t(:print_ticket), url: print_ticket_admin_order_path(order), icon: 'icon-print', target: "_blank" }
links << { name: t(:select_ticket_printer), url: "#{print_ticket_admin_order_path(order)}#select-printer", icon: 'icon-print', target: "_blank" }
end
end
if @order.ready_to_ship?
links << { name: t(:ship_order), url: fire_admin_order_path(@order, e: 'ship'), method: 'put', icon: 'icon-truck', confirm: t(:are_you_sure) }
end
links << { name: t(:cancel_order), url: fire_admin_order_path(@order.number, e: 'cancel'), icon: 'icon-trash', confirm: t(:are_you_sure) } if order.can_cancel?
links << edit_order_link unless action_name == "edit"
links.concat(complete_order_links) if @order.complete?
links << ship_order_link if @order.ready_to_ship?
links << cancel_order_link if @order.can_cancel?
links
end
private
def complete_order_links
[resend_confirmation_link] + invoice_links + ticket_links
end
def invoice_links
return [] unless Spree::Config[:enable_invoices?]
[send_invoice_link, print_invoice_link]
end
def send_invoice_link
if @order.distributor.can_invoice?
send_invoice_link_with_url
else
send_invoice_link_without_url
end
end
def ticket_links
return [] unless Spree::Config[:enable_receipt_printing?]
[print_ticket_link, select_ticket_printer_link]
end
def edit_order_link
{ name: t(:edit_order),
url: edit_admin_order_path(@order),
icon: 'icon-edit' }
end
def resend_confirmation_link
{ name: t(:resend_confirmation),
url: resend_admin_order_path(@order),
icon: 'icon-email',
method: 'post',
confirm: t(:confirm_resend_order_confirmation) }
end
def send_invoice_link_with_url
{ name: t(:send_invoice),
url: invoice_admin_order_path(@order),
icon: 'icon-email',
confirm: t(:confirm_send_invoice) }
end
def send_invoice_link_without_url
{ name: t(:send_invoice),
url: "#",
icon: 'icon-email',
confirm: t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) }
end
def print_invoice_link
{ name: t(:print_invoice),
url: print_admin_order_path(@order),
icon: 'icon-print',
target: "_blank" }
end
def print_ticket_link
{ name: t(:print_ticket),
url: print_ticket_admin_order_path(@order),
icon: 'icon-print',
target: "_blank" }
end
def select_ticket_printer_link
{ name: t(:select_ticket_printer),
url: "#{print_ticket_admin_order_path(@order)}#select-printer",
icon: 'icon-print',
target: "_blank" }
end
def ship_order_link
{ name: t(:ship_order),
url: fire_admin_order_path(@order, e: 'ship'),
method: 'put',
icon: 'icon-truck',
confirm: t(:are_you_sure) }
end
def cancel_order_link
{ name: t(:cancel_order),
url: fire_admin_order_path(@order.number, e: 'cancel'),
icon: 'icon-trash',
confirm: t(:are_you_sure) }
end
end
end
end

View File

@@ -29,6 +29,7 @@ Spree::AppConfiguration.class_eval do
preference :matomo_site_id, :string, default: nil
# Invoices & Receipts
preference :enable_invoices?, :boolean, default: true
preference :invoice_style2?, :boolean, default: false
preference :enable_receipt_printing?, :boolean, default: false

View File

@@ -5,6 +5,11 @@
= form_tag main_app.admin_invoice_settings_path, :method => :put do
.field.align-center
= hidden_field_tag 'preferences[enable_invoices?]', '0'
= check_box_tag 'preferences[enable_invoices?]', '1', Spree::Config[:enable_invoices?]
= label_tag nil, t('.enable_invoices?')
.field.align-center
= hidden_field_tag 'preferences[invoice_style2?]', '0'
= check_box_tag 'preferences[invoice_style2?]', '1', Spree::Config[:invoice_style2?]

View File

@@ -19,8 +19,9 @@
.row.index-controls{'ng-show' => '!RequestMonitor.loading && orders.length > 0'}
= render partial: 'per_page_controls'
%button.invoices-modal{'ng-controller' => 'bulkInvoiceCtrl', 'ng-click' => 'createBulkInvoice()', 'ng-disabled' => 'selected_orders.length == 0'}
= t('.print_invoices')
- if Spree::Config[:enable_invoices?]
%button.invoices-modal{'ng-controller' => 'bulkInvoiceCtrl', 'ng-click' => 'createBulkInvoice()', 'ng-disabled' => 'selected_orders.length == 0'}
= t('.print_invoices')
%table#listing_orders.index.responsive{width: "100%", 'ng-init' => 'initialise()', 'ng-show' => "!RequestMonitor.loading && orders.length > 0" }
%colgroup

View File

@@ -366,9 +366,10 @@ en:
invoice_settings:
edit:
title: Invoice Settings
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
title: "Invoice Settings"
enable_invoices?: "Enable Invoices?"
invoice_style2?: "Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)"
enable_receipt_printing?: "Show options for printing receipts using thermal printers in order dropdown?"
stripe_connect_settings:
edit:

View File

@@ -0,0 +1,102 @@
require 'spec_helper'
describe Spree::Admin::OrdersHelper, type: :helper do
describe "#orders_links" do
let(:order) { double(:order) }
let(:distributor) { double(:enterprise) }
around do |example|
original_invoices_setting = Spree::Config[:enable_invoices?]
original_tickets_setting = Spree::Config[:enable_receipt_printing?]
example.run
Spree::Config[:enable_invoices?] = original_invoices_setting
Spree::Config[:enable_receipt_printing?] = original_tickets_setting
end
before do
allow(order).to receive(:complete?) { false }
allow(order).to receive(:ready_to_ship?) { false }
allow(order).to receive(:can_cancel?) { false }
Spree::Config[:enable_invoices?] = false
Spree::Config[:enable_receipt_printing?] = false
end
it "returns only edit order link when all conditions are set to false" do
links = helper.order_links(order)
expect(links.size).to eq 1
expect(links.first[:name]).to eq "Edit Order"
end
context "complete order" do
before do
allow(order).to receive(:complete?) { true }
end
it "returns edit order and resend confirmation links" do
links = helper.order_links(order)
expect(links.size).to eq 2
expect(links[0][:name]).to eq "Edit Order"
expect(links[1][:name]).to eq "Resend Confirmation"
end
context "that can be canceled" do
before do
allow(order).to receive(:can_cancel?) { true }
allow(order).to receive(:number) { 111 }
end
it "adds cancel order link" do
links = helper.order_links(order)
expect(links.size).to eq 3
expect(links[2][:name]).to eq "Cancel Order"
end
end
context "that can be shipped" do
before do
allow(order).to receive(:ready_to_ship?) { true }
end
it "adds ship order link" do
links = helper.order_links(order)
expect(links.size).to eq 3
expect(links[2][:name]).to eq "Ship Order"
end
end
context "with invoices enabled" do
before do
Spree::Config[:enable_invoices?] = true
allow(order).to receive(:distributor) { distributor }
allow(distributor).to receive(:can_invoice?) { true }
end
it "adds send and print invoice links" do
links = helper.order_links(order)
expect(links.size).to eq 4
expect(links[2][:name]).to eq "Send Invoice"
expect(links[3][:name]).to eq "Print Invoice"
end
end
context "with tickets enabled" do
before do
Spree::Config[:enable_receipt_printing?] = true
end
it "adds print and select ticket links" do
links = helper.order_links(order)
expect(links.size).to eq 4
expect(links[2][:name]).to eq "Print Ticket"
expect(links[3][:name]).to eq "Select printer for tickets"
end
end
end
end
end