Hallo, das ist mk, das sich an Ingenieure richtet, die ihre Jobs von unerfahrenen wechseln. Diesmal habe ich die kostenlose API berührt.
Wie der Titel schon sagt, ist es mühsam, eine Rechnung hochzuladen und jedes Mal zu aktualisieren. Ich habe in Ruby eine Rechnung geschrieben, die eine Rechnung über die API ausstellt und alles bis zum + Update erledigt.
macOS 10.15.5 ruby 2.7.1
Verwendung von freee bei Vorabempfang (externer Link) Dieser Artikel ist leicht verständlich organisiert. Kurz gesagt, es ist eine Schaltfläche, mit der Sie die Vorauszahlung in Verkäufe ändern können. (Ich entschuldige mich, wenn ich mich irre ,,,)
Ich habe eine kostenlose Vorbestellungsverwaltungs-App im kostenlosen App Store. Ich habe dies erstellt, weil ich die Aufteilung des Verkaufsbetrags, der n Monate vor der Ausstellung der Rechnung eingegangen war, in monatliche Verkäufe von Grund auf automatisieren wollte.
Zunächst beschreiben wir die helferähnliche Verarbeitung.
helper.rb
#Monatsverarbeitung
def add_month(num)
if num < 12
return num = num + 1
elsif num == 12
num = 1
end
end
#Verarbeitung, um den positiven Verlängerungsbetrag für den ersten Monat zu ermitteln
def first_price(price,times)
(price % times) + (price / times)
end
Definieren Sie add_month, da Sie das Ende des Verlängerungsmonats einschließlich des Rechnungsausstellungsmonats erhalten müssen.
Wenn der in Rechnung gestellte Betrag nicht durch die Anzahl der Aktualisierungen teilbar ist, definieren Sie first_price, um den Rest in die erste Aktualisierung aufzunehmen.
Ein Modul, das den Header einer http-Anforderung angibt
set_header.rb
module Header
def self.get_header
headers = {
"accept" => "application/json",
"Authorization"=> "Bearer #{YOUR_ACCESS_TOKEN}"
}
end
def self.post_header
headers = {
"accept" => "application/json",
"Authorization"=> "Bearer #{YOUR_ACCESS_TOKEN}",
"Content-Type" => "application/json"
}
end
end
Rechnungscode
invoice.rb
require 'set_header.rb'
require 'json'
require 'net/http'
class Invoice
BASE_URL = 'https://api.freee.co.jp'
#Erstellen Sie eine Rechnung, indem Sie Parameter als Argumente übergeben
def self.make_invoice(params)
uri = URI.parse(BASE_URL + '/api/1/invoices')
http = Net::HTTP.new(uri.host,uri.port)
http.use_ssl = uri.scheme === "https"
req = Net::HTTP::Post.new(uri.path)
req.body = params.to_json
req.initialize_http_header(Header.post_header)
response = http.request(req)
res_hash = JSON.parse(response.body)
end
end
Plus Update-Erstellungscode
koushin.rb
require_relative 'set_header.rb'
require 'json'
require 'net/http'
class Koushin
BASE_URL = 'https://api.freee.co.jp'
#Transaktions-ID,Wenden Sie eine positive Aktualisierung an, indem Sie einen Parameter als Argument übergeben
def self.post_koushin(torihiki_id,params)
uri = URI.parse(BASE_URL + "/api/1/deals/#{torihiki_id}/renews")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme === "https"
req = Net::HTTP::Post.new(uri.path)
req.body = params.to_json
req.initialize_http_header(Header.post_header)
response = http.request(req)
res_hash = JSON.parse(response.body)
end
end
Und implementieren Sie von der Rechnungsstellung bis zur Verlängerung Der in Rechnung gestellte Betrag beträgt 12345678 Yen (ohne Steuern), der Steuersatz beträgt 10%
invoice_koushin.rb
require 'invoice.rb'
require 'koushin.rb'
require 'date'
require 'helper.rb'
#Andere verschiedene Anforderungen sind erforderlich, werden jedoch weggelassen
#Erforderliche Elemente einstellen
month = Time.now.month
year = Time.now.year
count = 1
company_id = Company.company_id #Siehe github Abrufen der Geschäftsbüro-ID
#Rechnungsbetrag(Ausländische Steuer)
amount = 12345678
#Verbraucher Steuer(10%)
vat = (amount * 0.1).floor
#+Anzahl der Updates
num = 12
#Rechnungsparameter
invoice_params = {
"company_id": company_id,
"issue_date": Date.today,
"due_date": Date.new(year, month, -1),
"partner_id": Supplier.supplier_id('CFO'), #Siehe github Konto-ID abrufen
"booking_date": Date.today,
"description": "#{Date.today.month}Monatliche Rechnung",
"invoice_status": "issue",
"partner_display_name": "CFO Co., Ltd.",
"partner_title": "Du",
"partner_contact_info": "Verkaufspersonal",
"partner_zipcode": "012-0009",
"partner_prefecture_code": 4,
"partner_address1": "Yuzawa City",
"partner_address2": "Gebäude A.",
"company_name": "freee Co., Ltd.",
"company_zipcode": "000-0000",
"company_prefecture_code": 12,
"company_address1": "XX Ward YY1-1-1",
"company_address2": "Gebäude 1F",
"company_contact_info": "Vertriebsmitarbeiter",
"payment_type": "transfer",
"payment_bank_info": "XX Bank YY Filiale 1111111",
"message": "Wir berechnen Ihnen wie folgt.",
"notes": "Vielen Dank jedes Mal",
"invoice_layout": "default_classic",
"tax_entry_method": "exclusive",
"invoice_contents": [
{
"order": 0,
"type": "normal",
"qty": 1,
"unit": "Stücke",
"unit_price": amount,
"vat": vat,
"description": "Bemerkungen",
"tax_code": 2,
"account_item_id": AccountItem.account_item_id('Unverdientes Einkommen') #github参照 Unverdientes Einkommenのaccount_item_ID abrufen
}
]
}
#Ausstellung von Rechnungen
invoice = Invoice.make_invoice(invoice_params)
puts 'Eine Rechnung ausgestellt'
#Abrufen der Transaktions-ID aus der Antwort auf die Rechnungsausstellung
torihiki_id = invoice['invoice']['deal_id']
#Rufen Sie die Transaktionszeilen-ID der obigen Transaktions-ID ab
renew_target_id = Torihiki.target_id(torihiki_id) #Siehe Github Torihiki_Rufen Sie die Details der Transaktion ab, die der ID zugeordnet ist, und rufen Sie von dort die Transaktionszeilen-ID ab
#+Konto-ID zum Zeitpunkt der Aktualisierung(Umsatz)Erhalten
uriagedaka_id = AccountItem.account_item_id('Umsatz') #Siehe Github
#Anzahl der Transaktions-IDs unter Verwendung der Transaktionszeilen-ID+Aktualisieren
num.times do
#Wenn die Anzahl 1 ist+Verlängerungsbetrag zuerst_Zum Preis wechseln
if count == 1
koushin_amount = first_price(amount,num)
koushin_vat = first_price(vat,num)
else
koushin_amount = amount / num
koushin_vat = vat / num
end
date = Date.new(year, month, -1)
#+Aktualisierungsparameter einstellen
koushin_params = {
"company_id": company_id,
"update_date": date,
"renew_target_id": renew_target_id,
"details": [
{
"account_item_id": uriagedaka_id,
"tax_code": 21,
"amount": (koushin_amount + koushin_vat),
"vat": koushin_vat
}
]
}
#Transaktions-ID,Mit Parametern+Update erstellen
Koushin.post_koushin(torihiki_id,koushin_params)
puts "#{date}Wurde aktualisiert"
#Holen Sie sich den Monat des nächsten Monats
month = add_month(month)
#Wenn der Monat Januar ist, fügen Sie 1 AD hinzu
year += 1 if month == 1
count += 1
end
Versuchen Sie es lokal auszuführen.
Der Prozess scheint ordnungsgemäß gelaufen zu sein. Die Ausführungszeit beträgt ca. 5 Sekunden (etwas lang ...) Werfen wir einen Blick auf Accounting Freee.
Sie können eine Rechnung an CFO Co., Ltd. ausstellen! Der Betrag und der Verbrauchsteuerbetrag sind ordnungsgemäß enthalten. Schauen wir uns als nächstes die Transaktionen an.
Der Betrag nach dem Update beträgt 0 Yen!Das Aktualisierungsdatum umfasst auch den letzten Tag von 12 Monaten einschließlich des Endes des Ausgabemonats.
Ich möchte die am Monatsende ausgestellte Rechnung verbessern, damit ich flexibel reagieren kann, z. B. was zu tun ist, das ich ab dem Monat nach Bestätigung der Überweisung aktualisieren möchte. Außerdem können Sie jeden Rechnungsparameter importieren und die Anzahl mit csv aktualisieren. Und der Code ist nicht schön ... lol
Jeden Tag gewidmet
Recommended Posts