как добавить данные в PDF из формы в RoR - PullRequest
0 голосов
/ 05 марта 2020

У меня есть Datatable в моем индексе. html .haml, из которого я выбираю несколько строк и затем выполняю массовое редактирование их всех в форме, которую я помещаю в edit_multiple. html .haml.

Мой вопрос заключается в том, как взять эти данные формы и отобразить их в формате PDF. Я получаю массив [: device_ids] из моего выбора таблицы, но я не смог спроецировать его в документе. Мне удалось заполнить мой pdf данными, которые у меня есть из моей общей таблицы, но на самом деле я хотел бы только те данные, которые я выбрал, то есть те, которые я собираюсь обновить / отредактировать. Как я могу сделать это возможным?

В моем индексе мне нужно загрузить все устройства, которые есть в моей таблице, из которых я буду выбирать, какие из них я хочу доставить, а затем передать в другое представление редактирования. это edit_multiple. html .haml, где я буду вводить в форму данные, которые я собираюсь обновить, используя def update_multiple. Что мне нужно сделать, это взять данные формы и передать их в PDF, теперь у меня есть интеграция в документ, но вся таблица через localhost: 3000 / devices.pdf

Я использую gem ' wicked_pdf 'и gem' wkhtmltopdf-binary '

.card
  .card-content
    %p1.title.is-3 Listado de equipos
    .media-content.is-pulled-right
      %p3.has-text-black Importar
      = form_tag import_devices_path, multipart: true do
        = file_field_tag :file
        = submit_tag "Guardar"
    .media-content.is-pulled-right
      .column
    .media-content.is-pulled-right
      %p3.has-text-black Descargar
      .tags.has-addons.file
        %span.tag.is-dark= link_to 'CSV', devices_path(format: "csv")
        %span.tag.is-primary= link_to 'XLS', devices_path(format: "xls")
    %hr
      .table__wrapper
        = form_tag edit_multiple_devices_path, method: :get do
          %table{:role => 'datatable'}
            %thead
              %tr
                %th
                %th.abbr{:title => "aidi"} Id
                %th.abbr{:title => "imei"} Imei
                %th.abbr{:title => "brand"} Marca
                %th.abbr{:title => "model"} Modelo
                %th.abbr{:title => "prov"} Proovedor
                %th.abbr{:title => "fac"} Factura
                %th.abbr{:title => "din"} Entrada
                %th.abbr{:title => "sim"} Sim
                %th.abbr{:title => "iccid"} Iccid
                %th.abbr{:title => "status"} Status
                %th.abbr{:title => "user_id"} Usuario
                %th.abbr{:title => "client"} Cliente
                %th.abbr{:title => "dout"} Salida
                %th.abbr{:title => :use} Usado
                %th.abbr{:title => :old} Reutilizado
              %tbody
                - @devices.includes(:user).each do |device|
                  %tr
                    %td= check_box_tag "device_ids[]", device.id
                    %td= device.aidi
                    %td= device.imei
                    %td= device.brand
                    %td= device.model
                    %td= device.prov
                    %td= device.fac
                    %td= device.din
                    %td= device.sim
                    %td= device.iccid
                    %td= device.status
                    %td= device.user.try :email
                    %td= device.client
                    %td= device.dout
                    %td= device.use
                    %td= device.old
          = submit_tag "Editar", class: "button is-primary is-rounded"
%br
%button.button.is-primary.is-rounded= link_to 'New Device', new_device_path

edit_multiple. html .haml

.columns
  .column.is-three-fifths.is-offset-one-fifth
    .card
      .card-content
        %h3.title.is-3 Entrega de equipos
        %hr
        = form_tag update_multiple_devices_path, method: :put do
          %ul
            - @devices.each do |device|
              %li
                = hidden_field_tag "device_ids[]", device.id
                = device.aidi
                %ul.errors
                  - device.errors.full_messages.each do |msg|
                    %li= msg
          = fields_for :device do |f|
            .field
              = f.label "Usuario", class: "label"
              = f.select :user_id, User.all.collect { |x| [x.email, x.id] }
            .field
              = f.label "Cliente", class: "label"
              = f.text_field :client
            .field
              = f.label "Fecha de entrega", class: "label"
              = f.date_select :dout
          .actions
            = submit_tag 'Guardar', class: "button is-primary"
        .has-text-right
          = link_to 'Regresar', devices_path

devices_controller

class DevicesController < ApplicationController
  before_action :set_device, only: [:show, :edit, :update, :destroy]
  # GET /devices
  # GET /devices.json
  def index
    @devices = Device.all
    respond_to do |format|
      format.html
      format.csv { send_data @devices.to_csv }
      format.xls #{ send_data @devices.to_csv(col_sep: "\t") }
      format.pdf {render template: 'devices/entrega', pdf: 'Entrega'}
    end
  end
def edit_multiple
    @devices = Device.find(params[:device_ids])
  end
def update_multiple
    @devices = Device.find(params[:device_ids])
    @devices.reject! do |device|
      device.update_attributes(params[:device].reject { |k,v| v.blank? })
    end
    if @devices.empty?
      redirect_to devices_url, notice: 'Equipos entregados'
    else
      @device = Device.new(params[:device])
      render "edit_multiple"
    end
  end
end

entrega. html. эрб

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="utf-8">
  <title>Entrega</title>
  <%= wicked_pdf_stylesheet_link_tag 'pdf' %>
  <link rel="stylesheet" type="text/scss" href="https://cdn.jsdelivr.net/npm/bulma@0.8.0/css/bulma.min.css">
</head>
<body>
<header class="clearfix">
  <div id="logo">
    <img src="logo.png">
  </div>
  <div id="company">
    <h2 class="name">Ubiknos México</h2>
    <div>Porfirio Díaz 100, Nochebuena, 0372455, CDMX</div>
    <div>55 9000 8961</div>
    <div><a href="mailto:company@example.com">instalaciones@ubiknos.com</a></div>
  </div>
  </div>
</header>
<main>
  <div id="details" class="clearfix">
    <div id="client">
      <div class="to">Destinatario:</div>
      <h2 class="name">Axel flores</h2>
      <div class="address">Entrega: David Melgoza</div>
      <div class="email"><a href="mailto:john@example.com">aqui va el correo.com</a></div>
    </div>
    <div id="invoice">
      <h1>10 Equipos</h1>
      <div class="date">fecha: 01/06/2014</div>
    </div>
  </div>
  <h2 class="name">Acuse de entrega</h2>
  <p>Han sido enviados o recibidos los siguientes equipos de rastreo GPS:</p>
  <br>
  <table id="E1" class="table-lightshading-accent1 E1">
    <tr>
      <td align="center">#</td>
      <td align="center">DESCRIPCION</td>
      <td align="center">ID</td>
      <td align="center">IMEI</td>
    </tr>
    <% @devices.each do |device| %>
      <tr>
        <td align="center"><%= device.id %></td>
        <td align="center"><%= device.model %></td>
        <td align="center"><%= device.aidi %></td>
        <td align="center"><%= device.imei %></td>
      </tr>
    <% end %>
  </table>
  <div id="thanks">Gracias!</div>
  <div id="notices">
    <div>NOTA:</div>
    <div class="notice">Asegurate de comparar la información recibida en éste documento con el material entregado, de haber alguna irregularidad contactate con el equipo de ingeniería.</div>
  </div>
  <hr>
  <p class="date">Firma de conformidad:</p>
  <br>
  <u><a>estoy conforme we</a></u>
</main>
<footer>
  Ubiknos México, S.A. de C.V. –Porfirio Díaz No. 100 piso 6, Col. Nochebuena, México, D.F., C.P. 03720 / R.F.C. UME090714GU5
</footer>
</body>
</html>
...