# frozen_string_literal: true # Avoir is a special type of Invoice, which it inherits. It is used to # refund an user, based on a previous invoice, or to credit an user's wallet. class Avoir < Invoice belongs_to :invoice validates :payment_method, inclusion: { in: %w[stripe cheque transfer none cash wallet] } attr_accessor :invoice_items_ids def generate_reference pattern = Setting.find_by(name: 'invoice_reference').value # invoice number per day (dd..dd) reference = pattern.gsub(/d+(?![^\[]*\])/) do |match| pad_and_truncate(number_of_invoices('day'), match.to_s.length) end # invoice number per month (mm..mm) reference.gsub!(/m+(?![^\[]*\])/) do |match| pad_and_truncate(number_of_invoices('month'), match.to_s.length) end # invoice number per year (yy..yy) reference.gsub!(/y+(?![^\[]*\])/) do |match| pad_and_truncate(number_of_invoices('year'), match.to_s.length) end # full year (YYYY) reference.gsub!(/YYYY(?![^\[]*\])/, created_at.strftime('%Y')) # year without century (YY) reference.gsub!(/YY(?![^\[]*\])/, created_at.strftime('%y')) # abbreviated month name (MMM) reference.gsub!(/MMM(?![^\[]*\])/, created_at.strftime('%^b')) # month of the year, zero-padded (MM) reference.gsub!(/MM(?![^\[]*\])/, created_at.strftime('%m')) # month of the year, non zero-padded (M) reference.gsub!(/M(?![^\[]*\])/, created_at.strftime('%-m')) # day of the month, zero-padded (DD) reference.gsub!(/DD(?![^\[]*\])/, created_at.strftime('%d')) # day of the month, non zero-padded (DD) reference.gsub!(/DD(?![^\[]*\])/, created_at.strftime('%-d')) # information about refund/avoir (R[text]) reference.gsub!(/R\[([^\]]+)\]/, '\1') # remove information about online selling (X[text]) reference.gsub!(/X\[([^\]]+)\]/, ''.to_s) self.reference = reference end def expire_subscription user.subscription.expire(Time.now) end end