НАША РАЗРАБОТКА RUSSIAN-INVOICES
Гем для генерации различных документов в формате pdf для rails приложения.
Зачастую при разработке серьезных проектов довольно часто возникает необходимость формирования таких документов как счет-фактура, договор, акт выполненных работ. Все это безусловно необходимо как для того, чтобы облегчить жизнь нашим любимым пользователям, так и для автоматизации документооборота вцелом. Все частоповторяющиеся задачи как известно лучше всего выносить в отдельные модули, для того, чтобы их можно было использовать в других проектах повторно. Что собственно мы и решили сделать.
Представляем вашему вниманию нашу разработку - RussianInvoices.
На этапе проектирвоания данного гема перед нами стоял выбор средств реализации гема. Было 2 варианта: prawn, или wicked_pdf. Решили остановиться на последнем, т.к. производить верстку макетов на haml гораздо проще и быстрее, чем средствами prawn. Все это в итоге дает возможность довольно активного развития гема, а так же гибкости при его использовании.
RussianInvoices был опробован и гарантированно работает с rails 4.
Инструкция по использованию:
Для того, чтобы подключить гем в приложение, необходимо добавить в свой Gemfile следующую строку:
gem 'russian_invoices'
Далее все действия осуществляются в методе контроллера вашего приложения. Нужно передать гему информацию соответствующего документа и далее, либо отрендерить на месте документ, либо отдать его пользователю в виде файла.
Пример:
Тип документа - “Договор”
doc = RussianInvoices::Contract.create(
name: 'На оказание консалтинговых услуг',
number: 1,
city: 'Воронеж',
from_date: '"01" января 2015г.',
body: '<p>Очень длинный текст договора — Без конца и края...</p>'*10,
customer_details: 'Никулин Александр Юрьевич<br />
Паспорт XXXX XXXXXX<br />
Выдан в городе Воронеже 01.01.1812, код подразделения 000-001, проживающий по адресу г.Воронеж, ул.Безымянная, д. 1, кв.111
Тел.: 8-000-000-00-00',
performer_details: 'http://rubyruby.ru',
customer_position: 'Заказчик',
performer_position: 'Разработчик',
customer_signature: Rails.root.join('public', 'signature.png'),
performer_signature: Rails.root.join('public', 'signature.png'),
customer_stamp: Rails.root.join('public', 'stamp.png'),
performer_stamp: Rails.root.join('public', 'stamp.png')
)
Доступные методы:
render_pdf_document(doc) - отобразить документ в браузере пользователя
download_pdf_document(doc) - отдать документ на скачку пользователю
generate_document(doc) - tempfile со сгенерированным документом
generate_document_str(doc) - сгенерированный документ(String), который вы можете записать в файл.
Примеры использования других документов можно увидеть здесь
Для того чтобы добавить новый тип документа у себя в проекте, допустим, “фиговый лист”, нужно:
создать модель app/models/russian_invoices/fig_leaf.rb
class RussianInvoices::FigLeaf < RussianInvoices::BaseModel
attr_accessor :number, :body
validates :number, numericality: true
validates_presence_of :number, :body
def custom_method
number.to_s + ‘ - ’ + body
end
end
добавить файл представления:
app/views/russian_invoices/documents/fig_leaf.html.haml
%h1= @doc.number
%p= @doc.body
%p= @doc.custom_method
Собственно, вот и все. теперь можно этим воспользоваться
doc = RussianInvoices::FigLeaf.create(number: 1, body: ‘bla-bla-bla...’)
render_pdf_document(doc)
Напишите нам
Мы постараемся ответить в самый кратчайший срок!