diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 1c817ba93..2365559d8 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -191,7 +191,7 @@ class Invoice < PaymentDocument end def paid_by_card? - !payment_gateway_object.nil? && payment_method == 'card' + payment_method == 'card' end def paid_by_wallet? diff --git a/app/services/invoices/number_service.rb b/app/services/invoices/number_service.rb index 19d6971f4..59ade6eaa 100644 --- a/app/services/invoices/number_service.rb +++ b/app/services/invoices/number_service.rb @@ -34,31 +34,20 @@ class Invoices::NumberService pattern = pattern(date, setting) pattern = pattern.gsub(/([SXR]\[[^\]]+\])+/, '%') - if pattern.match?(/n+/) - pattern = pattern.gsub(/n+/) do |match| - pad_and_truncate(number, match.to_s.length) - end + case pattern + when /n+/ pattern = pattern.gsub(/[YMD]+/) { |match| '_' * match.to_s.length } - else - case pattern - when /y+/ - pattern = pattern.gsub(/y+/) do |match| - pad_and_truncate(number, match.to_s.length) - end - pattern = pattern.gsub(/[MD]+/) { |match| '_' * match.to_s.length } - when /m+/ - pattern = pattern.gsub(/m+/) do |match| - pad_and_truncate(number, match.to_s.length) - end - pattern = pattern.gsub(/D+/) { |match| '_' * match.to_s.length } - when /d+/ - pattern = pattern.gsub(/d+/) do |match| - pad_and_truncate(number, match.to_s.length) - end - end + when /y+/ + pattern = pattern.gsub(/[MD]+/) { |match| '_' * match.to_s.length } + when /m+/ + pattern = pattern.gsub(/D+/) { |match| '_' * match.to_s.length } end pattern = PaymentDocumentService.send(:replace_date_pattern, pattern, date) + pattern = pattern.gsub(/n+|y+|m+|d+/) do |match| + pad_and_truncate(number, match.to_s.length) + end + field = setting == 'invoice_reference' ? 'reference' : 'order_number' field = 'reference' if klass == Order klass.where("#{field} LIKE '#{pattern}'").first diff --git a/lib/tasks/fablab/fix_references.rake b/lib/tasks/fablab/fix_references.rake index c3cf789c3..1d598ae5d 100644 --- a/lib/tasks/fablab/fix_references.rake +++ b/lib/tasks/fablab/fix_references.rake @@ -13,13 +13,18 @@ namespace :fablab do # browse invoices to list missing reference puts 'Computing missing references...' - not_closed(Invoice).order(created_at: :desc).each do |invoice| + not_closed(Invoice).find_each do |invoice| number = Invoices::NumberService.number(invoice) next if number == 1 + previous = Invoice.where('created_at < :date', date: db_time(invoice.created_at)) + .order(created_at: :desc) + .limit(1) + .first + previous_saved_number = Invoices::NumberService.number(previous) previous_number = number - 1 loop do - break if previous_number.zero? + break if previous_number.zero? || previous_number == previous_saved_number previous_invoice = Invoices::NumberService.find_by_number(previous_number, date: invoice.created_at) break if previous_invoice.present? @@ -36,7 +41,7 @@ namespace :fablab do total = missing_references.values.filter(&:present?).flatten.count counter = 1 missing_references.each_pair do |date, numbers| - numbers.uniq.sort.reverse_each.with_index do |number, index| + numbers.each_with_index do |number, index| print "#{counter} / #{total}\r" invoice = Invoice.new( total: 0,