Story#105852786 - Directo invoices are calculated based on invoices

This commit is contained in:
Vladimir Krylov 2016-01-19 12:39:42 +02:00
parent bc640c63fe
commit 72bd54dc7c
6 changed files with 22 additions and 19 deletions

View file

@ -32,7 +32,7 @@ class BankLink
hash["VK_AMOUNT"] = number_with_precision(invoice.sum_cache, :precision => 2, :separator => ".") hash["VK_AMOUNT"] = number_with_precision(invoice.sum_cache, :precision => 2, :separator => ".")
hash["VK_CURR"] = invoice.currency hash["VK_CURR"] = invoice.currency
hash["VK_REF"] = "" hash["VK_REF"] = ""
hash["VK_MSG"] = "Order nr. #{invoice.number}" hash["VK_MSG"] = invoice.description
hash["VK_RETURN"] = controller.registrar_return_payment_with_url(type) hash["VK_RETURN"] = controller.registrar_return_payment_with_url(type)
hash["VK_CANCEL"] = controller.registrar_return_payment_with_url(type) hash["VK_CANCEL"] = controller.registrar_return_payment_with_url(type)
hash["VK_DATETIME"] = Time.now.strftime("%Y-%m-%dT%H:%M:%S%z") hash["VK_DATETIME"] = Time.now.strftime("%Y-%m-%dT%H:%M:%S%z")
@ -101,6 +101,7 @@ class BankLink
transaction.buyer_iban = params["VK_SND_ACC"] transaction.buyer_iban = params["VK_SND_ACC"]
transaction.buyer_name = params["VK_SND_NAME"] transaction.buyer_name = params["VK_SND_NAME"]
transaction.paid_at = Time.parse(params["VK_T_DATETIME"]) transaction.paid_at = Time.parse(params["VK_T_DATETIME"])
transaction.save!
transaction.autobind_invoice transaction.autobind_invoice
end end

View file

@ -2,7 +2,7 @@ class BankTransaction < ActiveRecord::Base
include Versions include Versions
belongs_to :bank_statement belongs_to :bank_statement
has_one :account_activity has_one :account_activity
has_many :directo_records, as: :item, class_name: 'Directo' has_many :directo_records, as: :item, class_name: 'Directo'# Deprecated
scope :unbinded, lambda { scope :unbinded, lambda {
where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)') where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)')

View file

@ -2,30 +2,27 @@ class Directo < ActiveRecord::Base
belongs_to :item, polymorphic: true belongs_to :item, polymorphic: true
def self.send_receipts def self.send_receipts
new_trans = BankTransaction.where(in_directo: false) new_trans = Invoice.where(invoice_type: "DEB", in_directo: false)
new_trans.find_in_batches(batch_size: 10).each do |group| new_trans.find_in_batches(batch_size: 10).each do |group|
mappers = {} # need them as no direct connection between transaction and invoice mappers = {} # need them as no direct connection between invoice
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml| builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices { xml.invoices {
group.each do |transaction| group.each do |invoice|
invoice = transaction.invoice num = invoice.number
next unless invoice mappers[num] = invoice
num = transaction.invoice_num
mappers[num] = transaction
xml.invoice( xml.invoice(
"SalesAgent" => Setting.directo_sales_agent, "SalesAgent" => Setting.directo_sales_agent,
"Number" => num, "Number" => num,
"InvoiceDate" => (transaction.paid_at||transaction.created_at).strftime("%Y-%m-%dT%H:%M:%S"), "InvoiceDate" => (invoice.account_activity.try(:bank_transaction).try(:paid_at) || invoice.updated_at).strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term, "PaymentTerm" => Setting.directo_receipt_payment_term,
"Currency" => transaction.currency, "Currency" => invoice.currency,
"CustomerCode"=> invoice.buyer.try(:directo_handle) "CustomerCode"=> invoice.buyer.try(:directo_handle)
){ ){
xml.line( xml.line(
"ProductID"=> Setting.directo_receipt_product_name, "ProductID"=> Setting.directo_receipt_product_name,
"Quantity" => 1, "Quantity" => 1,
"UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."), "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
"ProductName" => transaction.description "ProductName" => invoice.description
) )
} }
end end

View file

@ -2,8 +2,9 @@ class Invoice < ActiveRecord::Base
include Versions include Versions
belongs_to :seller, class_name: 'Registrar' belongs_to :seller, class_name: 'Registrar'
belongs_to :buyer, class_name: 'Registrar' belongs_to :buyer, class_name: 'Registrar'
has_many :invoice_items
has_one :account_activity has_one :account_activity
has_many :invoice_items
has_many :directo_records, as: :item, class_name: 'Directo'
accepts_nested_attributes_for :invoice_items accepts_nested_attributes_for :invoice_items
@ -99,6 +100,10 @@ class Invoice < ActiveRecord::Base
kit.to_pdf kit.to_pdf
end end
def description
"Order nr. #{number}"
end
def pdf_name def pdf_name
"invoice-#{number}.pdf" "invoice-#{number}.pdf"
end end

View file

@ -1,5 +0,0 @@
class AddInDirectoToBankTransaction < ActiveRecord::Migration
def change
add_column :bank_transactions, :in_directo, :boolean, default: false
end
end

View file

@ -0,0 +1,5 @@
class AddInDirectoToInvoice < ActiveRecord::Migration
def change
add_column :invoices, :in_directo, :boolean, default: false
end
end