slogan3

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

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.