dorsale 3.9.3 → 3.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/app/controllers/dorsale/billing_machine/application_controller.rb +14 -0
- data/app/controllers/dorsale/billing_machine/invoices_controller.rb +16 -12
- data/app/controllers/dorsale/billing_machine/quotations_controller.rb +32 -2
- data/app/{commands/dorsale/flyboy/task_commands.rb → crons/dorsale/flyboy/task_crons.rb} +1 -1
- data/app/mailers/dorsale/generic_mailer.rb +9 -0
- data/app/models/dorsale/billing_machine/email.rb +33 -0
- data/app/models/dorsale/billing_machine/invoice.rb +7 -2
- data/app/models/dorsale/billing_machine/quotation.rb +7 -2
- data/app/models/dorsale/email.rb +80 -0
- data/app/policies/dorsale/billing_machine/invoice_policy_helper.rb +1 -5
- data/app/policies/dorsale/billing_machine/quotation_policy_helper.rb +3 -0
- data/app/services/dorsale/billing_machine/pdf_file_generator.rb +6 -2
- data/app/views/dorsale/_actions.html.slim +1 -1
- data/app/views/dorsale/billing_machine/commons/_details.html.slim +121 -0
- data/app/views/dorsale/billing_machine/commons/_email.html.slim +16 -0
- data/app/views/dorsale/billing_machine/commons/_form.html.slim +115 -0
- data/app/views/dorsale/billing_machine/commons/_header_infos.html.slim +9 -0
- data/app/views/dorsale/billing_machine/{invoices → commons}/_line_details.html.slim +0 -0
- data/app/views/dorsale/billing_machine/commons/_line_fields.html.slim +27 -0
- data/app/views/dorsale/billing_machine/commons/_preview_button.html.slim +25 -0
- data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -126
- data/app/views/dorsale/billing_machine/invoices/_form.html.slim +1 -115
- data/app/views/dorsale/billing_machine/invoices/_header_infos.html.slim +1 -9
- data/app/views/dorsale/billing_machine/invoices/_line_fields.html.slim +1 -27
- data/app/views/dorsale/billing_machine/invoices/_show_title.html.slim +2 -7
- data/app/views/dorsale/billing_machine/invoices/email.html.slim +1 -51
- data/app/views/dorsale/billing_machine/quotations/_details.html.slim +6 -1
- data/app/views/dorsale/billing_machine/quotations/_form.html.slim +1 -1
- data/app/views/dorsale/billing_machine/quotations/_header_infos.html.slim +1 -1
- data/app/views/dorsale/billing_machine/quotations/_line_fields.html.slim +1 -1
- data/app/views/dorsale/billing_machine/quotations/_show_actions.html.slim +4 -1
- data/app/views/dorsale/billing_machine/quotations/_show_title.html.slim +7 -1
- data/app/views/dorsale/billing_machine/quotations/email.html.slim +1 -0
- data/app/views/dorsale/forms/_send_email_buttons.html.slim +10 -0
- data/config/locales/billing_machine.en.yml +10 -5
- data/config/locales/billing_machine.fr.yml +10 -4
- data/config/locales/dorsale.en.yml +11 -0
- data/config/locales/dorsale.fr.yml +11 -0
- data/config/routes.rb +11 -4
- data/config/schedule.rb +1 -1
- data/features/billing_machine_invoices.feature +7 -0
- data/features/billing_machine_quotations.feature +14 -0
- data/features/step_definitions/billing_machine_invoices_steps.rb +17 -0
- data/features/step_definitions/billing_machine_quotations_steps.rb +40 -0
- data/features/step_definitions/flyboy_tasks_steps.rb +1 -1
- data/lib/dorsale/version.rb +1 -1
- data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +16 -0
- data/spec/controllers/dorsale/billing_machine/quotations_controller_spec.rb +19 -0
- data/spec/models/dorsale/billing_machine/invoice_spec.rb +4 -0
- data/spec/models/dorsale/billing_machine/quotation_spec.rb +5 -1
- data/spec/models/dorsale/expense_gun/expense_line_spec.rb +1 -1
- data/spec/rails_helper.rb +1 -4
- data/spec/routing/dorsale/billing_machine/invoices_routing_spec.rb +5 -0
- data/spec/routing/dorsale/billing_machine/quotations_routing_spec.rb +15 -0
- metadata +15 -6
- data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +0 -13
- data/app/views/dorsale/billing_machine/quotations/_line_details.html.slim +0 -1
@@ -2,4 +2,23 @@ require "rails_helper"
|
|
2
2
|
|
3
3
|
describe Dorsale::BillingMachine::QuotationsController, type: :controller do
|
4
4
|
routes { Dorsale::Engine.routes }
|
5
|
+
|
6
|
+
let(:user) { create(:user) }
|
7
|
+
before(:each) { sign_in(user) }
|
8
|
+
|
9
|
+
describe "#preview" do
|
10
|
+
render_views
|
11
|
+
|
12
|
+
it "should render show" do
|
13
|
+
post :preview
|
14
|
+
expect(response).to render_template(:show)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not save" do
|
18
|
+
post :preview
|
19
|
+
@quotation = assigns(:quotation)
|
20
|
+
expect(@quotation).to be_valid
|
21
|
+
expect(@quotation).to_not be_persisted
|
22
|
+
end
|
23
|
+
end # describe "#preview" do
|
5
24
|
end
|
@@ -27,6 +27,10 @@ describe Dorsale::BillingMachine::Invoice, type: :model do
|
|
27
27
|
expect(create(:billing_machine_invoice)).to be_valid
|
28
28
|
end
|
29
29
|
|
30
|
+
it "should return document_type" do
|
31
|
+
expect(described_class.new.document_type).to eq :invoice
|
32
|
+
end
|
33
|
+
|
30
34
|
describe "unique_index" do
|
31
35
|
context "when unique index is 69" do
|
32
36
|
it "should be assigned upon creation" do
|
@@ -7,7 +7,7 @@ describe Dorsale::BillingMachine::Quotation do
|
|
7
7
|
|
8
8
|
it { is_expected.to validate_presence_of :date }
|
9
9
|
it { is_expected.to validate_presence_of :state }
|
10
|
-
it { is_expected.to
|
10
|
+
it { is_expected.to validate_inclusion_of(:state).in_array(described_class::STATES) }
|
11
11
|
it { is_expected.to respond_to :date }
|
12
12
|
it { is_expected.to respond_to :label }
|
13
13
|
it { is_expected.to respond_to :vat_amount }
|
@@ -21,6 +21,10 @@ describe Dorsale::BillingMachine::Quotation do
|
|
21
21
|
expect(create(:billing_machine_quotation)).to be_valid
|
22
22
|
end
|
23
23
|
|
24
|
+
it "should return document_type" do
|
25
|
+
expect(described_class.new.document_type).to eq :quotation
|
26
|
+
end
|
27
|
+
|
24
28
|
describe "default values" do
|
25
29
|
it "default date should be today" do
|
26
30
|
expect(described_class.new.date).to eq Date.current
|
@@ -11,7 +11,7 @@ RSpec.describe ::Dorsale::ExpenseGun::ExpenseLine, type: :model do
|
|
11
11
|
it { is_expected.to validate_presence_of :company_part }
|
12
12
|
it { is_expected.to validate_numericality_of(:total_all_taxes).is_greater_than_or_equal_to(0) }
|
13
13
|
it { is_expected.to validate_numericality_of(:company_part).is_greater_than_or_equal_to(0) }
|
14
|
-
it { is_expected.to validate_numericality_of(:company_part).is_less_than_or_equal_to(100
|
14
|
+
it { is_expected.to validate_numericality_of(:company_part).is_less_than_or_equal_to(100) }
|
15
15
|
|
16
16
|
it "expense line factory should be valid?" do
|
17
17
|
expense_line = build :expense_gun_expense_line, expense: build(:expense_gun_expense)
|
data/spec/rails_helper.rb
CHANGED
@@ -3,6 +3,7 @@ ENV["RAILS_ENV"] = 'test'
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
5
5
|
require 'rspec/rails'
|
6
|
+
require "agilibox/rspec"
|
6
7
|
require "yomu"
|
7
8
|
# Add additional requires below this line. Rails is not loaded until this point!
|
8
9
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
@@ -51,8 +52,4 @@ RSpec.configure do |config|
|
|
51
52
|
# The different available types are documented in the features, such as in
|
52
53
|
# https://relishapp.com/rspec/rspec-rails/docs
|
53
54
|
config.infer_spec_type_from_file_location!
|
54
|
-
|
55
|
-
config.include FactoryBot::Syntax::Methods
|
56
|
-
|
57
|
-
config.after { Timecop.return }
|
58
55
|
end
|
@@ -49,6 +49,11 @@ describe ::Dorsale::BillingMachine::InvoicesController, type: :routing do
|
|
49
49
|
route_to("dorsale/billing_machine/invoices#update", id: "1")
|
50
50
|
end
|
51
51
|
|
52
|
+
it "#preview" do
|
53
|
+
expect(post "/billing_machine/invoices/preview").to \
|
54
|
+
route_to("dorsale/billing_machine/invoices#preview")
|
55
|
+
end
|
56
|
+
|
52
57
|
it "#email via GET" do
|
53
58
|
expect(get "/billing_machine/invoices/1/email").to \
|
54
59
|
route_to("dorsale/billing_machine/invoices#email", id: "1")
|
@@ -39,6 +39,11 @@ describe ::Dorsale::BillingMachine::QuotationsController do
|
|
39
39
|
route_to("dorsale/billing_machine/quotations#destroy", id: "1")
|
40
40
|
end
|
41
41
|
|
42
|
+
it "#preview" do
|
43
|
+
expect(post "/billing_machine/quotations/preview").to \
|
44
|
+
route_to("dorsale/billing_machine/quotations#preview")
|
45
|
+
end
|
46
|
+
|
42
47
|
it "#copy" do
|
43
48
|
expect(post "/billing_machine/quotations/1/copy").to \
|
44
49
|
route_to("dorsale/billing_machine/quotations#copy", id: "1")
|
@@ -48,5 +53,15 @@ describe ::Dorsale::BillingMachine::QuotationsController do
|
|
48
53
|
expect(get "/billing_machine/quotations/1/create_invoice").to \
|
49
54
|
route_to("dorsale/billing_machine/quotations#create_invoice", id: "1")
|
50
55
|
end
|
56
|
+
|
57
|
+
it "#email via GET" do
|
58
|
+
expect(get "/billing_machine/quotations/1/email").to \
|
59
|
+
route_to("dorsale/billing_machine/quotations#email", id: "1")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "#email via PORT" do
|
63
|
+
expect(post "/billing_machine/quotations/1/email").to \
|
64
|
+
route_to("dorsale/billing_machine/quotations#email", id: "1")
|
65
|
+
end
|
51
66
|
end
|
52
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dorsale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.9.
|
4
|
+
version: 3.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- agilidée
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -525,7 +525,6 @@ files:
|
|
525
525
|
- app/assets/stylesheets/dorsale/engines/flyboy.sass
|
526
526
|
- app/assets/stylesheets/dorsale/engines/users.sass
|
527
527
|
- app/assets/stylesheets/dorsale/opt/bootstrap_nav_left.sass
|
528
|
-
- app/commands/dorsale/flyboy/task_commands.rb
|
529
528
|
- app/controllers/concerns/dorsale/flyboy/tasks_summary_concern.rb
|
530
529
|
- app/controllers/dorsale/alexandrie/attachments_controller.rb
|
531
530
|
- app/controllers/dorsale/application_controller.rb
|
@@ -547,6 +546,7 @@ files:
|
|
547
546
|
- app/controllers/dorsale/flyboy/task_comments_controller.rb
|
548
547
|
- app/controllers/dorsale/flyboy/tasks_controller.rb
|
549
548
|
- app/controllers/dorsale/users_controller.rb
|
549
|
+
- app/crons/dorsale/flyboy/task_crons.rb
|
550
550
|
- app/filters/dorsale/billing_machine/small_data/filter_for_invoices.rb
|
551
551
|
- app/filters/dorsale/billing_machine/small_data/filter_for_quotations.rb
|
552
552
|
- app/filters/dorsale/billing_machine/small_data/filter_strategy_by_customer.rb
|
@@ -569,8 +569,8 @@ files:
|
|
569
569
|
- app/helpers/dorsale/flyboy/application_helper.rb
|
570
570
|
- app/helpers/dorsale/users_helper.rb
|
571
571
|
- app/mailers/dorsale/application_mailer.rb
|
572
|
-
- app/mailers/dorsale/billing_machine/invoice_mailer.rb
|
573
572
|
- app/mailers/dorsale/flyboy/task_mailer.rb
|
573
|
+
- app/mailers/dorsale/generic_mailer.rb
|
574
574
|
- app/mailers/dorsale/user_mailer.rb
|
575
575
|
- app/models/dorsale/address.rb
|
576
576
|
- app/models/dorsale/alexandrie.rb
|
@@ -578,6 +578,7 @@ files:
|
|
578
578
|
- app/models/dorsale/alexandrie/attachment_type.rb
|
579
579
|
- app/models/dorsale/application_record.rb
|
580
580
|
- app/models/dorsale/billing_machine.rb
|
581
|
+
- app/models/dorsale/billing_machine/email.rb
|
581
582
|
- app/models/dorsale/billing_machine/invoice.rb
|
582
583
|
- app/models/dorsale/billing_machine/invoice_line.rb
|
583
584
|
- app/models/dorsale/billing_machine/payment_term.rb
|
@@ -595,6 +596,7 @@ files:
|
|
595
596
|
- app/models/dorsale/customer_vault/origin.rb
|
596
597
|
- app/models/dorsale/customer_vault/person.rb
|
597
598
|
- app/models/dorsale/customer_vault/person_data.rb
|
599
|
+
- app/models/dorsale/email.rb
|
598
600
|
- app/models/dorsale/expense_gun.rb
|
599
601
|
- app/models/dorsale/expense_gun/category.rb
|
600
602
|
- app/models/dorsale/expense_gun/expense.rb
|
@@ -659,12 +661,18 @@ files:
|
|
659
661
|
- app/views/dorsale/alexandrie/attachments/_new_disabled.html.slim
|
660
662
|
- app/views/dorsale/alexandrie/attachments/_progress_bar.html.slim
|
661
663
|
- app/views/dorsale/alexandrie/attachments/index.html.slim
|
664
|
+
- app/views/dorsale/billing_machine/commons/_details.html.slim
|
665
|
+
- app/views/dorsale/billing_machine/commons/_email.html.slim
|
666
|
+
- app/views/dorsale/billing_machine/commons/_form.html.slim
|
667
|
+
- app/views/dorsale/billing_machine/commons/_header_infos.html.slim
|
668
|
+
- app/views/dorsale/billing_machine/commons/_line_details.html.slim
|
669
|
+
- app/views/dorsale/billing_machine/commons/_line_fields.html.slim
|
670
|
+
- app/views/dorsale/billing_machine/commons/_preview_button.html.slim
|
662
671
|
- app/views/dorsale/billing_machine/invoices/_details.html.slim
|
663
672
|
- app/views/dorsale/billing_machine/invoices/_filters.html.slim
|
664
673
|
- app/views/dorsale/billing_machine/invoices/_form.html.slim
|
665
674
|
- app/views/dorsale/billing_machine/invoices/_header_infos.html.slim
|
666
675
|
- app/views/dorsale/billing_machine/invoices/_index_actions.html.slim
|
667
|
-
- app/views/dorsale/billing_machine/invoices/_line_details.html.slim
|
668
676
|
- app/views/dorsale/billing_machine/invoices/_line_fields.html.slim
|
669
677
|
- app/views/dorsale/billing_machine/invoices/_list.html.slim
|
670
678
|
- app/views/dorsale/billing_machine/invoices/_show_actions.html.slim
|
@@ -688,12 +696,12 @@ files:
|
|
688
696
|
- app/views/dorsale/billing_machine/quotations/_form.html.slim
|
689
697
|
- app/views/dorsale/billing_machine/quotations/_header_infos.html.slim
|
690
698
|
- app/views/dorsale/billing_machine/quotations/_index_actions.html.slim
|
691
|
-
- app/views/dorsale/billing_machine/quotations/_line_details.html.slim
|
692
699
|
- app/views/dorsale/billing_machine/quotations/_line_fields.html.slim
|
693
700
|
- app/views/dorsale/billing_machine/quotations/_list.html.slim
|
694
701
|
- app/views/dorsale/billing_machine/quotations/_show_actions.html.slim
|
695
702
|
- app/views/dorsale/billing_machine/quotations/_show_title.html.slim
|
696
703
|
- app/views/dorsale/billing_machine/quotations/edit.html.slim
|
704
|
+
- app/views/dorsale/billing_machine/quotations/email.html.slim
|
697
705
|
- app/views/dorsale/billing_machine/quotations/index.html.slim
|
698
706
|
- app/views/dorsale/billing_machine/quotations/new.html.slim
|
699
707
|
- app/views/dorsale/billing_machine/quotations/show.html.slim
|
@@ -790,6 +798,7 @@ files:
|
|
790
798
|
- app/views/dorsale/flyboy/tasks/show.html.slim
|
791
799
|
- app/views/dorsale/flyboy/tasks/summary.html.slim
|
792
800
|
- app/views/dorsale/forms/_avatar.html.slim
|
801
|
+
- app/views/dorsale/forms/_send_email_buttons.html.slim
|
793
802
|
- app/views/dorsale/user_mailer/new_account.html.slim
|
794
803
|
- app/views/dorsale/users/_form.html.slim
|
795
804
|
- app/views/dorsale/users/_index_actions.html.slim
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class Dorsale::BillingMachine::InvoiceMailer < ::Dorsale::ApplicationMailer
|
2
|
-
def send_invoice_to_customer(invoice, subject, body, sender = nil)
|
3
|
-
attachments["#{invoice.t}_#{invoice.tracking_id}.pdf"] = invoice.pdf_file.read
|
4
|
-
|
5
|
-
mail(
|
6
|
-
:to => invoice.customer.email,
|
7
|
-
:cc => sender.email,
|
8
|
-
:reply_to => sender.email,
|
9
|
-
:subject => subject,
|
10
|
-
:body => body,
|
11
|
-
)
|
12
|
-
end
|
13
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
= render "dorsale/billing_machine/invoices/line_details", line: line
|