Story#105855968 - 1st scratch how to send monthly invoices

This commit is contained in:
Vladimir Krylov 2016-02-25 13:34:52 +02:00
parent e8bf3f7e64
commit e45915b9da
2 changed files with 78 additions and 0 deletions

20
app/models/counter.rb Normal file
View file

@ -0,0 +1,20 @@
class Counter
def initialize value = 0
@value = value
end
attr_accessor :value
def method_missing *args, &blk
@value.send(*args, &blk)
end
def to_s
@value.to_s
end
# pre-increment ".+" when x not present
def next(x = 1)
@value += x
end
def prev(x = 1)
@value -= x
end
end

View file

@ -46,4 +46,62 @@ class Directo < ActiveRecord::Base
Rails.logger.info("[DIRECTO] Invoice #{res.attributes["docid"].value} was pushed and return is #{res.as_json.to_h.inspect}")
end
end
def self.send_monthly_invoices
product_ids = {"ee" => "01EE", "com.ee" => "02COM", "pri.ee" => "03PRI", "fie.ee"=>"04FIE", "med.ee" => "05MED"}
month = Time.now - 1.month
invoices_until = month.end_of_month
# pochemu registrar has_many :accounts
activity_scope = AccountActivity.where(activity_type: [CREATE, RENEW])
Registrar.joins(:account).find_each do |registrar|
next unless registrar.cash_account
counter = Counter.new
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
activity_scope.where(account_id: registrar.cash_account)
xml.invoices{
xml.invoice("Number"=>"13980",
"InvoiceDate"=>invoices_until.strftime("%Y-%m-%d"),
"PaymentTerm"=>"E",
"CustomerCode"=>registrar.directo_handle,
"Language"=>"",
"Currency"=>"EUR",
"SalesAgent"=>Setting.directo_sales_agent){
xml.line("RN" => counter.next, "RR"=>1, "ProductName"=> "Domeenide registreerimine - Juuli 2015")
activity_scope.where(account_id: registrar.account_ids).each do |activity|
xml.line("RN"=>counter.next, "RR"=>"2", "ProductID"=>"01EE", "Quantity"=>"1911", "Unit"=>"tk", "ProductName"=>".ee registreerimine: 1 aasta", "UnitPriceWoVAT"=>"9.00")
end
}
}
end
end
end
end
=begin
RN - incremental
RR - grouping of rows - is same for rows where sum is devided to more than one year eg. 7 - 7 - 7 for 3 year 21 domains
<?xml version="1.0" encoding="UTF-8"?>
<invoices>
<!-- Period (UTC) : 2015-06-30 21:00:00 to 2015-07-31 21:00:00 -->
<!-- Executed at : Thu Aug 13 09:32:51 2015 -->
<invoice Number="13980" InvoiceDate="2015-07-31" PaymentTerm="E" CustomerCode="REGISTRAR2" Language="" Currency="EUR" SalesAgent="NIMI">
<line RN="1" RR="1" ProductName="Domeenide registreerimine - Juuli 2015" />
<line RN="2" RR="2" ProductID="01EE" Quantity="1911" Unit="tk" ProductName=".ee registreerimine: 1 aasta" UnitPriceWoVAT="9.00" />
<line RN="3" RR="3" ProductID="01EE" Quantity="154" Unit="tk" ProductName=".ee registreerimine: 2 aastat" UnitPriceWoVAT="9.00" />
<line RN="4" RR="3" ProductID="01EE" Quantity="154" Unit="tk" ProductName=".ee registreerimine: 2 aastat" UnitPriceWoVAT="8.00" StartDate="2016-07-31" EndDate="2016-07-31" />
<line RN="5" RR="5" ProductID="01EE" Quantity="170" Unit="tk" ProductName=".ee registreerimine: 3 aastat" UnitPriceWoVAT="9.00" />
<line RN="6" RR="5" ProductID="01EE" Quantity="170" Unit="tk" ProductName=".ee registreerimine: 3 aastat" UnitPriceWoVAT="8.00" StartDate="2016-07-31" EndDate="2016-07-31" />
<line RN="7" RR="5" ProductID="01EE" Quantity="170" Unit="tk" ProductName=".ee registreerimine: 3 aastat" UnitPriceWoVAT="7.00" StartDate="2017-07-31" EndDate="2017-07-31" />
<line RN="8" RR="8" ProductID="03PRI" Quantity="2" Unit="tk" ProductName=".pri.ee registreerimine: 1 aasta" UnitPriceWoVAT="9.00" />
<line RN="9" RR="9" ProductID="04FIE" Quantity="1" Unit="tk" ProductName=".fie.ee registreerimine: 1 aasta" UnitPriceWoVAT="9.00" />
<line RN="10" RR="10" ProductID="02COM" Quantity="11" Unit="tk" ProductName=".com.ee registreerimine: 1 aasta" UnitPriceWoVAT="9.00" />
<line RN="11" RR="11" ProductID="ETTEM06" Quantity="-1" Unit="tk" ProductName="Domeenide ettemaks" UnitPriceWoVAT="1000.00" />
</invoice>
</invoices>
=end