wco_models 3.1.0.95 → 3.1.0.96

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae03145e8191b78c7e2428e0f6aeca805eaf1027188ed29fefd95e3efbc3ca1a
4
- data.tar.gz: 8d6e41d9daed642b6618b2756c46c813f76098644337695cc75421944d03cbf6
3
+ metadata.gz: 2b8f95ac4445fae28c24950aa08aa7c36cfe21d61a7f5791c0ca688862f2216b
4
+ data.tar.gz: f37434ed5db0e33d3754b0e91e4cf69c3c90272e358f5229eebc7ca314ec56d0
5
5
  SHA512:
6
- metadata.gz: 5c9c3f163ab78fec2ad25837e069cac2162e29de0c986e75792f8b314886c65b1e390428ac0bbd26813ff42feaaa97ff999c5d57b54b74c45e0882d82651316e
7
- data.tar.gz: 0527a5c66734608bf8926768f2c76d084069d33911508e138a6212255e2b22426a91493ef334bb92465f731a097af1b8f239f356c505637babd4b14cd7459f01
6
+ metadata.gz: da38057b8f74c5c3ce868398cc6868d253f32f2b3ed4803e52ad40caa3f889507ba92b17d46180bd362e79a9a45fb568654667911b3dbdb38528584358b0d1a5
7
+ data.tar.gz: 408013e01f428949316aac1ab3866affc50f3efa1ba9ce41147a2451186809c1b053781a67979f381535be23414e138d014e3548d7711e0c2b5cd0d79490ce77
@@ -14,11 +14,13 @@
14
14
  //
15
15
  // require select2
16
16
  //
17
- //= require ./alerts-notices
18
- //= require ./collapse-expand
19
- //= require ./file_upload
20
- //= require ./office_action_templates
17
+ // require ./alerts-notices
18
+ // require ./collapse-expand
19
+ // require ./file_upload
20
+ // require ./office_action_templates
21
+ //
21
22
  //= require ./shared
23
+ //= require_tree .
22
24
  //
23
25
 
24
26
  $(function() {
@@ -0,0 +1,33 @@
1
+
2
+ const AppRouter = {
3
+ product_path: (id) => `/wco/products/${id}.json`,
4
+ }
5
+
6
+ $(document).ready(function () {
7
+
8
+ // const jwt_token = $("#Config").data('jwt-token')
9
+ // logg(jwt_token, 'jwt_token')
10
+ // path = `/api/products/${productId}.json?jwt_token=${jwt_token}`
11
+
12
+ if ($(".invoices-new").length) {
13
+
14
+ $("select[name='invoice[items][][product_id]']").on('change', function(ev) {
15
+ var productId = ev.target.value
16
+ logg(productId, 'productId')
17
+
18
+ $.get(AppRouter.product_path(productId), function(_data) {
19
+ logg(_data, '_data')
20
+
21
+ $('select[name="invoice[items][][price_id]"]').empty();
22
+ // $('select[name="invoice[items][][price_id]"]').append($("<option disabled=true selected=true></option>").attr("value", '').text('Choose a price...')
23
+ $.each(_data.prices, function(_, item) {
24
+ $('select[name="invoice[items][][price_id]"]').append($("<option></option>").attr("value", item.id).text(item.name));
25
+ })
26
+ })
27
+ })
28
+
29
+ }
30
+
31
+
32
+ })
33
+
@@ -0,0 +1,159 @@
1
+ require 'prawn'
2
+ require 'prawn/table'
3
+
4
+ class Wco::InvoicesController < Wco::ApplicationController
5
+
6
+ before_action :set_lists
7
+
8
+ def create_monthly_pdf
9
+ month_on = DateTime.strptime(params[:month_on], '%Y-%m-%d').strftime('%Y-%m-01')
10
+ @leadset = Leadset.find params[:leadset_id]
11
+ authorize! :create_monthly_invoice_pdf, @leadset
12
+
13
+ @invoice = Wco::Invoice.where({ leadset_id: @leadset.id, month_on: month_on }).first
14
+ if @invoice && !params[:replace]
15
+ flash_alert "Already created this invoice."
16
+ redirect_to controller: :leadsets, action: :show, id: @leadset.id
17
+ return
18
+ end
19
+
20
+ if !@invoice
21
+ @invoice = Wco::Invoice.create({
22
+ leadset_id: @leadset.id,
23
+ month_on: month_on,
24
+ number: @leadset.next_invoice_number,
25
+ })
26
+ @leadset.update_attributes({ next_invoice_number: @leadset.next_invoice_number + 1 })
27
+ end
28
+
29
+ @pdf = @invoice.generate_monthly_invoice
30
+ path = "/tmp/#{@invoice.filename}"
31
+ @pdf.render_file path
32
+ data = File.read path
33
+
34
+ asset = ::Gameui::Asset3d.new invoice: @invoice
35
+ f = File.new( path )
36
+ asset.object = f
37
+ f.close
38
+ @invoice.asset = asset
39
+ if asset.save
40
+ flash_notice "Saved the asset."
41
+ end
42
+ if @invoice.save
43
+ flash_notice "Saved the invoice."
44
+ end
45
+
46
+ File.delete(path) if File.exist?(path)
47
+ redirect_to controller: :leadsets, action: :show, id: @invoice.leadset_id
48
+
49
+ # send_data( data, { :filename => @invoice.filename,
50
+ # :disposition => params[:disposition] ? params[:disposition] : :attachment,
51
+ # :type => 'application/pdf'
52
+ # })
53
+ end
54
+
55
+ def create_stripe
56
+ @invoice = Wco::Invoice.new params[:invoice].permit!
57
+ authorize! :create, @invoice
58
+
59
+ stripe_invoice = Stripe::Invoice.create({
60
+ customer: @invoice.leadset.customer_id,
61
+ collection_method: 'send_invoice',
62
+ days_until_due: 0,
63
+ # collection_method: 'charge_automatically',
64
+ pending_invoice_items_behavior: 'exclude',
65
+ })
66
+ params[:invoice][:items].each do |item|
67
+ stripe_price = Wco::Price.find( item[:price_id] ).price_id
68
+ puts! stripe_price, 'stripe_price'
69
+ invoice_item = Stripe::InvoiceItem.create({
70
+ customer: @invoice.leadset.customer_id,
71
+ price: stripe_price,
72
+ invoice: stripe_invoice.id,
73
+ quantity: item[:quantity],
74
+ })
75
+ end
76
+ Stripe::Invoice.finalize_invoice( stripe_invoice[:id] )
77
+ if params[:do_send]
78
+ Stripe::Invoice.send_invoice(stripe_invoice[:id])
79
+ flash_notice "Scheduled to send the invoice via stripe."
80
+ end
81
+ @invoice.update_attributes({ invoice_id: stripe_invoice[:id] })
82
+
83
+ if @invoice.save
84
+ flash_notice "Created the invoice."
85
+ redirect_to action: :show, id: @invoice.id
86
+ else
87
+ flash_alert "Cannot create invoice: #{@invoice.errors.messages}"
88
+ render :new
89
+ end
90
+ end
91
+
92
+ def index
93
+ authorize! :index, Wco::Invoice
94
+ @invoices = Wco::Invoice.all
95
+ if params[:leadset_id]
96
+ @invoices = @invoices.where( leadset_id: params[:leadset_id] )
97
+ end
98
+ @invoices = @invoices.includes( :payments )
99
+ end
100
+
101
+ def new_pdf
102
+ authorize! :new, @invoice
103
+ @leadset = Leadset.find params[:leadset_id]
104
+ @products_list = Wco::Product.list
105
+ end
106
+
107
+ def new_stripe
108
+ authorize! :new, @invoice
109
+ @leadset = Wco::Leadset.find params[:leadset_id]
110
+ @products_list = Wco::Product.list
111
+ end
112
+
113
+ def email_send
114
+ @invoice = Wco::Invoice.find params[:id]
115
+ authorize! :send_email, @invoice
116
+ out = ::IshManager::LeadsetMailer.monthly_invoice( @invoice.id.to_s )
117
+ Rails.env.production? ? out.deliver_later : out.deliver_now
118
+ flash_notice "Scheduled to send an email."
119
+ redirect_to controller: :leadsets, action: :show, id: @invoice.leadset_id
120
+ end
121
+
122
+ def send_stripe
123
+ @invoice = Wco::Invoice.find params[:id]
124
+ authorize! :send_stripe, @invoice
125
+ Stripe::Invoice.send_invoice( @invoice.invoice_id )
126
+ flash_notice "Scheduled to send the invoice."
127
+ redirect_to action: :show, id: @invoice.id
128
+ end
129
+
130
+ def show
131
+ @invoice = Wco::Invoice.find params[:id]
132
+ authorize! :show, @invoice
133
+ @stripe_invoice = Stripe::Invoice.retrieve @invoice.invoice_id
134
+ end
135
+
136
+ def update
137
+ @invoice = Wco::Invoice.find params[:id]
138
+ authorize! :update, @invoice
139
+ if @invoice.update_attributes params[:invoice].permit!
140
+ flash[:notice] = 'Success'
141
+ redirect_to :action => 'index'
142
+ else
143
+ flash[:alert] = "Cannot update invoice: #{@invoice.errors.messages}"
144
+ end
145
+ redirect_to :action => 'index'
146
+ end
147
+
148
+ #
149
+ # private
150
+ #
151
+ private
152
+
153
+ def set_lists
154
+ @invoice_number = Wco::Invoice.order_by( :number => :desc ).first
155
+ @invoice_number = @invoice_number ? @invoice_number.number + 1 : 1
156
+ @new_invoice = Wco::Invoice.new :number => @invoice_number
157
+ end
158
+
159
+ end
@@ -23,17 +23,17 @@ class Wco::ProductsController < Wco::ApplicationController
23
23
  end
24
24
 
25
25
  def destroy
26
- authorize! :destroy, Wco::Product
27
- # product = Wco::Product.find params[:id]
28
-
29
- flag = Stripe::Product.delete( params[:id] )
30
- # puts! flag, 'flag'
31
- flash[:notice] = flag
32
- # if product.destroy
33
- # flash[:notice] = 'Success'
34
- # else
35
- # flash[:alert] = "Cannot destroy product: #{product.errors.fill_messages.join(', ')}."
36
- # end
26
+ @product = Wco::Product.find params[:id]
27
+ authorize! :destroy, @product
28
+
29
+ # flag = Stripe::Product.delete( @product.product_id ) if @product.product_id.present?
30
+ # flash_notice "Delete stripe product: #{flag}"
31
+
32
+ if @product.destroy
33
+ flash_notice 'Deleted Wco::Product'
34
+ else
35
+ flash_alert "Cannot destroy product: #{@product.errors.fill_messages.join(', ')}."
36
+ end
37
37
  redirect_to action: :index
38
38
  end
39
39
 
@@ -82,6 +82,10 @@ class Wco::ProductsController < Wco::ApplicationController
82
82
  def show
83
83
  authorize! :show, @product
84
84
  @product = Wco::Product.find params[:id]
85
+ respond_to do |format|
86
+ format.html
87
+ format.json { render 'show.jbuilder', layout: false }
88
+ end
85
89
  end
86
90
 
87
91
  def update
@@ -13,11 +13,6 @@ class Wco::Price
13
13
 
14
14
  field :amount_cents, type: Integer
15
15
 
16
- def to_s
17
- price = self
18
- "$#{ price[:amount_cents].to_f/100 }/#{ price.interval||'onetime' }"
19
- end
20
-
21
16
  INTERVAL_DAY = 'day'
22
17
  INTERVAL_WEEK = 'week'
23
18
  INTERVAL_MONTH = 'month'
@@ -27,10 +22,13 @@ class Wco::Price
27
22
 
28
23
  field :price_id # stripe
29
24
 
25
+ def to_s
26
+ price = self
27
+ "$#{ price[:amount_cents].to_f/100 }/#{ price.interval||'onetime' }"
28
+ end
30
29
  def self.list
31
30
  [[nil,nil]] + all.map { |p| [ "#{p.product.name} :: #{p.amount_cents.to_f/100}/#{p.interval||'onetime'}", p.id ] }
32
31
  end
33
-
34
32
  end
35
33
 
36
34
 
@@ -13,10 +13,12 @@ class Wco::Product
13
13
 
14
14
  has_many :subscriptions, as: :product
15
15
 
16
+ def to_s
17
+ name
18
+ end
16
19
  def self.list
17
20
  [ [nil,nil] ] + self.all.order_by({ name: :asc }).map { |i| [i.name, i.id] }
18
21
  end
19
-
20
22
  end
21
23
 
22
24
 
@@ -1,5 +1,8 @@
1
1
 
2
- -# 2023-12-25 v.0.0.0
2
+ -# = notice.inspect
3
+ -# = alert.inspect
4
+
5
+ -## 2024-01-30 v.0.0.1
3
6
  .wco--alerts-notices.flexwidth
4
7
 
5
8
  - if notice&.class == String
@@ -7,13 +7,13 @@
7
7
 
8
8
  .row
9
9
  .col.s12.col.m6.col-md-offset-3
10
- %h5 New Stripe Invoice for `#{link_to @leadset&.name, leadset_path(@leadset)}`:
10
+ %h5 New Stripe Invoice for `#{link_to @leadset, leadset_path(@leadset)}`:
11
11
 
12
12
  = form_for invoice, :as => :invoice, :url => url do |f|
13
13
  = hidden_field_tag 'invoice[leadset_id]', @leadset.id
14
14
 
15
15
  .input-field
16
- %label Email
16
+ %label <b>Email:</b>
17
17
  = @leadset.email
18
18
  -# - if @leadset.email
19
19
  -# = f.text_field :email, value: @leadset.email
@@ -6,7 +6,7 @@
6
6
 
7
7
  %ul
8
8
  %li email: #{i.email}
9
- %li leadset: #{link_to i.leadset.name, leadset_path( i.leadset) }
9
+ %li leadset: #{link_to i.leadset, leadset_path( i.leadset) }
10
10
  %li invoice_id: #{i.invoice_id}
11
11
  %li items: #{i.items}
12
12
 
@@ -10,6 +10,7 @@
10
10
  %tr
11
11
  %td.p-2
12
12
  = link_to '[~]', edit_product_path( product )
13
+ .d-inline-block= button_to 'x', product_path(product), method: :delete, data: { confirm: 'Are you sure?' }
13
14
  = product.name
14
15
  .gray= product.product_id
15
16
  %td.p-2
@@ -0,0 +1,2 @@
1
+
2
+ = render :form, product: @product
@@ -0,0 +1,16 @@
1
+
2
+ params.permit!
3
+ json.cache! [ params, @product ] do
4
+
5
+ json.id @product.id.to_s
6
+ json.name @product.to_s
7
+
8
+ json.prices do
9
+ json.array! @product.prices do |price|
10
+ json.id price.id.to_s
11
+ json.name price.to_s
12
+ end
13
+ end
14
+
15
+ end
16
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wco_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0.95
4
+ version: 3.1.0.96
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Pudeyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-24 00:00:00.000000000 Z
11
+ date: 2024-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-s3
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.20.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: jbuilder
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.11.5
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.11.5
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: haml
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -359,6 +373,7 @@ files:
359
373
  - app/assets/javascripts/wco/application.js
360
374
  - app/assets/javascripts/wco/collapse-expand.js
361
375
  - app/assets/javascripts/wco/file_upload.js
376
+ - app/assets/javascripts/wco/invoices.js
362
377
  - app/assets/javascripts/wco/office_action_templates.js
363
378
  - app/assets/javascripts/wco/shared.js
364
379
  - app/assets/stylesheets/vendor/bootstrap-4.6.2.min.css
@@ -373,6 +388,7 @@ files:
373
388
  - app/controllers/wco/application_controller.rb
374
389
  - app/controllers/wco/galleries_controller.rb
375
390
  - app/controllers/wco/headlines_controller.rb
391
+ - app/controllers/wco/invoices_controller.rb
376
392
  - app/controllers/wco/leads_controller.rb
377
393
  - app/controllers/wco/leadsets_controller.rb
378
394
  - app/controllers/wco/logs_controller.rb
@@ -405,7 +421,7 @@ files:
405
421
  - app/models/wco/office_action_template.rb
406
422
  - app/models/wco/office_action_template_tie.rb
407
423
  - app/models/wco/photo.rb
408
- - app/models/wco/premium_item.rb
424
+ - app/models/wco/premium_item.rb-trash
409
425
  - app/models/wco/price.rb
410
426
  - app/models/wco/product.rb
411
427
  - app/models/wco/profile.rb
@@ -526,7 +542,9 @@ files:
526
542
  - app/views/wco/products/_table.haml
527
543
  - app/views/wco/products/edit.haml
528
544
  - app/views/wco/products/index.haml
545
+ - app/views/wco/products/new.haml
529
546
  - app/views/wco/products/show.haml
547
+ - app/views/wco/products/show.jbuilder
530
548
  - app/views/wco/publishers/_form.haml
531
549
  - app/views/wco/publishers/_header.haml
532
550
  - app/views/wco/publishers/edit.haml