Help me met het schrijven van Ruby code voor geautomatiseerde documentgeneratie
description
Met deze prompt kun je op maat gemaakte Ruby code krijgen die automatisch documenten genereert, waardoor je handmatig werk vermijdt en efficiënter professionele documenten produceert. Het lost het probleem op van tijdrovende documentcreatie en maakt het eenvoudig om sjablonen en verschillende bestandsformaten te gebruiken. Dit is beter dan handmatige of minder flexibele oplossingen omdat het aanpasbaar is en foutafhandeling bevat.
prompt
Help me met het schrijven van Ruby code die automatisch documenten genereert volgens de volgende specificaties: <beschrijf het type document, bijvoorbeeld rapporten, facturen, brieven>. Geef aan welke gegevensbronnen ik moet gebruiken: <beschrijf ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een basisvoorbeeld van Ruby-code die een factuur genereert in PDF-formaat, gebruikmakend van JSON-bestanden voor gegevens, ERB-sjablonen en de `prawn`-bibliotheek voor PDF-generatie. Deze code is eenvoudig aanpasbaar en bevat basisfoutafhandeling.
Stap 1: Vereiste Gems installeren
Voer in je terminal uit:
```bash
gem install json prawn erb
```
Stap 2: Bestanden opzetten
1. `gegevens.json` — JSON-bestand met klant- en productgegevens:
```json
{
"klant": {
"naam": "Jan Jansen",
"adres": "Straat 123",
"plaats": "Amsterdam",
"postcode": "1000 AA"
},
"factuur": {
"nummer": "2023-001",
"datum": "2023-10-15",
"items": [
{"omschrijving": "Product A", "aantal": 2, "prijs": 50},
{"omschrijving": "Product B", "aantal": 1, "prijs": 100}
]
}
}
```
2. `factuur_template.erb` — ERB-template voor de factuur:
```erb
Factuurnummer: <%= factuur["nummer"] %>
Datum: <%= factuur["datum"] %>
Klantgegevens:
<%= klant["naam"] %>
<%= klant["adres"] %>
<%= klant["postcode"] %> <%= klant["plaats"] %>
---
| Omschrijving | Aantal | Prijs | Totaal |
|--------------|---------|--------|--------|
<% total = 0 %>
<% factuur["items"].each do |item| %>
| <%= item["omschrijving"] %> | <%= item["aantal"] %> | €<%= sprintf('%.2f', item["prijs"]) %> | €<%= sprintf('%.2f', item["aantal"] * item["prijs"]) %> |
<% total += item["aantal"] * item["prijs"] %>
<% end %>
---
Totaal: €<%= sprintf('%.2f', total) %>
```
3. Ruby-script `generate_factuur.rb`:
```ruby
require 'json'
require 'erb'
require 'prawn'
# Lees JSON-gegevens
begin
data = JSON.parse(File.read('gegevens.json'))
rescue Errno::ENOENT
puts "Fout: 'gegevens.json' niet gevonden."
exit
rescue JSON::ParserError => e
puts "Fout bij het parseren van JSON: #{e.message}"
exit
end
klant = data['klant']
factuur = data['factuur']
# Lees ERB-sjabloon
begin
template_content = File.read('factuur_template.erb')
rescue Errno::ENOENT
puts "Fout: 'factuur_template.erb' niet gevonden."
exit
end
# Render ERB-template
renderer = ERB.new(template_content)
factuur_text = renderer.result(binding)
# Genereer PDF met Prawn
begin
Prawn::Document.generate("factuur_#{factuur['nummer']}.pdf") do |pdf|
# Voeg tekst toe
pdf.font "Helvetica"
pdf.text "Factuur #{factuur['nummer']}", size: 20, style: :bold
pdf.move_down 10
pdf.text "Datum: #{factuur['datum']}"
pdf.move_down 10
pdf.text "Klantgegevens:", style: :bold
pdf.text klant['naam']
pdf.text klant['adres']
pdf.text "#{klant['postcode']} #{klant['plaats']}"
pdf.move_down 20
# Tabel met items
table_data = [["Omschrijving", "Aantal", "Prijs", "Totaal"]]
total = 0
factuur['items'].each do |item|
totaal_item = item['aantal'] * item['prijs']
total += totaal_item
table_data << [
item['omschrijving'],
item['aantal'].to_s,
"€#{'%.2f' % item['prijs']}",
"€#{'%.2f' % totaal_item}"
]
end
pdf.table(table_data, header: true, width: pdf.bounds.width) do
row(0).font_style = :bold
columns(2..3).align = :right
end
pdf.move_down 10
pdf.text "Totaal: €#{'%.2f' % total}", size: 16, style: :bold
end
puts "Factuur gegenereerd: factuur_#{factuur['nummer']}.pdf"
rescue => e
puts "Fout bij het genereren van PDF: #{e.message}"
end
```
Aanpassingen:
- Pas `gegevens.json` en `factuur_template.erb` aan naar jouw specifieke gegevens en wensen.
- Voeg eventueel meer foutafhandeling toe voor edge-cases.
- Voor complexere sjablonen of stijlen kun je de ERB-sjabloon uitbreiden of Prawn-structuren aanpassen.
Dit geeft je een goede basis om automatisch facturen te genereren die makkelijk te onderhouden en aan te passen zijn.
provider: deepseek
model: deepseek-chat
Hier is een voorbeeld van Ruby code voor het genereren van facturen vanuit JSON-gegevens:
```ruby
require 'json'
require 'erb'
require 'prawn'
class FactuurGenerator
attr_reader :configuratie, :sjabloon_map
def initialize(configuratie_bestand = 'config.json')
@configuratie = laad_configuratie(configuratie_bestand)
@sjabloon_map = @configuratie['sjabloon_map'] || 'sjablonen'
end
def genereer_factuur(klant_id, product_ids, output_bestand)
begin
klant = haal_klant_gegevens(klant_id)
producten = haal_product_gegevens(product_ids)
factuur_data = bereid_data_voor(klant, producten)
pdf_content = render_sjabloon(factuur_data)
maak_pdf(pdf_content, output_bestand)
puts "Factuur succesvol gegenereerd: #{output_bestand}"
rescue JSON::ParserError => e
puts "Fout bij het parsen van JSON: #{e.message}"
rescue Errno::ENOENT => e
puts "Bestand niet gevonden: #{e.message}"
rescue StandardError => e
puts "Onverwachte fout: #{e.message}"
end
end
private
def laad_configuratie(bestand)
JSON.parse(File.read(bestand))
rescue => e
{
'klanten_bestand' => 'data/klanten.json',
'producten_bestand' => 'data/producten.json',
'sjabloon_bestand' => 'factuur_sjabloon.erb'
}
end
def haal_klant_gegevens(klant_id)
klanten_data = JSON.parse(File.read(@configuratie['klanten_bestand']))
klant = klanten_data.find { |k| k['id'] == klant_id }
raise "Klant met ID #{klant_id} niet gevonden" unless klant
klant
end
def haal_product_gegevens(product_ids)
producten_data = JSON.parse(File.read(@configuratie['producten_bestand']))
producten = product_ids.map do |id|
product = producten_data.find { |p| p['id'] == id }
raise "Product met ID #{id} niet gevonden" unless product
product
end
producten
end
def bereid_data_voor(klant, producten)
totaal_bedrag = producten.sum { |p| p['prijs'] * p['aantal'] }
btw_bedrag = totaal_bedrag * 0.21
{
klant: klant,
producten: producten,
factuur_datum: Time.now.strftime("%d-%m-%Y"),
factuur_nummer: generate_factuur_nummer,
totaal_bedrag: totaal_bedrag,
btw_bedrag: btw_bedrag,
totaal_inclusief_btw: totaal_bedrag + btw_bedrag
}
end
def render_sjabloon(data)
sjabloon_path = File.join(@sjabloon_map, @configuratie['sjabloon_bestand'])
sjabloon = ERB.new(File.read(sjabloon_path))
sjabloon.result(binding)
end
def maak_pdf(content, output_bestand)
Prawn::Document.generate(output_bestand) do |pdf|
pdf.text content, inline_format: true
end
end
def generate_factuur_nummer
"FACT-#{Time.now.strftime('%Y%m%d')}-#{rand(1000..9999)}"
end
end
# Voorbeeld gebruik:
generator = FactuurGenerator.new
generator.genereer_factuur(123, [456, 789], 'factuur_2024.pdf')
```
**Benodigde gegevensbronnen:**
1. **config.json** - Configuratiebestand:
```json
{
"klanten_bestand": "data/klanten.json",
"producten_bestand": "data/producten.json",
"sjabloon_bestand": "factuur.erb"
}
```
2. **data/klanten.json** - Klantgegevens:
```json
[
{
"id": 123,
"naam": "Jansen BV",
"adres": "Hoofdstraat 123",
"postcode": "1234 AB",
"plaats": "Amsterdam",
"btw_nummer": "NL123456789B01"
}
]
```
3. **data/producten.json** - Productgegevens:
```json
[
{
"id": 456,
"naam": "Product A",
"prijs": 49.99,
"aantal": 2
},
{
"id": 789,
"naam": "Product B",
"prijs": 29.95,
"aantal": 1
}
]
```
4. **sjablonen/factuur.erb** - ERB-sjabloon:
```erb
Factuur: <%= factuur_nummer %>
Datum: <%= factuur_datum %>
Klantgegevens:
<%= klant['naam'] %>
<%= klant['adres'] %>
<%= klant['postcode'] %> <%= klant['plaats'] %>
Producten:
<% producten.each do |product| %>
- <%= product['naam'] %>: €<%= product['prijs'] %> x <%= product['aantal'] %>
<% end %>
Totaal exclusief BTW: €<%= "%.2f" % totaal_bedrag %>
BTW (21%): €<%= "%.2f" % btw_bedrag %>
Totaal inclusief BTW: €<%= "%.2f" % totaal_inclusief_btw %>
```
**Installatie vereisten:**
```bash
gem install prawn
```
De code is modulair opgebouwd, gebruikt duidelijke foutafhandeling en is eenvoudig aan te passen door de configuratie en sjablonen te wijzigen.