aub-payroll 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.codeclimate.yml +39 -0
- data/.eslintignore +8 -0
- data/.eslintrc +128 -0
- data/.rubocop.hound.yml +243 -0
- data/.rubocop.yml +55 -0
- data/.scss-lint.yml +25 -0
- data/.travis.yml +15 -0
- data/DEPLOYING.md +25 -0
- data/README.md +61 -12
- data/aub-payroll.gemspec +24 -14
- data/lib/aub/payroll.rb +16 -1
- data/lib/aub/payroll/{file.rb → epf_file.rb} +1 -1
- data/lib/aub/payroll/{file → epf_file}/footer.rb +6 -7
- data/lib/aub/payroll/{file → epf_file}/header.rb +4 -5
- data/lib/aub/payroll/{file → epf_file}/row.rb +5 -6
- data/lib/aub/payroll/summary_file.rb +19 -0
- data/lib/aub/payroll/summary_file/company_info.rb +23 -0
- data/lib/aub/payroll/summary_file/custom_pdf_kit.rb +14 -0
- data/lib/aub/payroll/summary_file/generator.rb +36 -0
- data/lib/aub/payroll/summary_file/html_generator.rb +75 -0
- data/lib/aub/payroll/summary_file/payroll_info.rb +18 -0
- data/lib/aub/payroll/summary_file/templates/body.slim +75 -0
- data/lib/aub/payroll/summary_file/templates/clear.css +74 -0
- data/lib/aub/payroll/summary_file/templates/footer.js +23 -0
- data/lib/aub/payroll/summary_file/templates/footer.slim +10 -0
- data/lib/aub/payroll/summary_file/templates/header.slim +15 -0
- data/lib/aub/payroll/summary_file/templates/style.scss +178 -0
- data/lib/aub/payroll/summary_file/transaction.rb +16 -0
- data/lib/aub/payroll/version.rb +1 -1
- data/vendor/underscore-min.js +6 -0
- metadata +168 -8
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            module AUB
         | 
| 2 | 
            +
              module Payroll
         | 
| 3 | 
            +
                module SummaryFile
         | 
| 4 | 
            +
                  class HTMLGenerator
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                    def initialize(company_info:, payroll_info:, transactions:)
         | 
| 7 | 
            +
                      @company_info = company_info
         | 
| 8 | 
            +
                      @payroll_info = payroll_info
         | 
| 9 | 
            +
                      @transactions = transactions
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def generate
         | 
| 13 | 
            +
                      Dir.mktmpdir do |dir|
         | 
| 14 | 
            +
                        Dir.chdir(dir) do
         | 
| 15 | 
            +
                          render 'body.slim', 'body.html'
         | 
| 16 | 
            +
                          render 'header.slim', 'header.html'
         | 
| 17 | 
            +
                          render 'footer.slim', 'footer.html'
         | 
| 18 | 
            +
                          render 'style.scss', 'style.css'
         | 
| 19 | 
            +
                          render 'clear.css', with: :copy
         | 
| 20 | 
            +
                          render 'footer.js', with: :copy
         | 
| 21 | 
            +
                          render 'underscore-min.js', with: :copy, from: :vendor
         | 
| 22 | 
            +
                          yield
         | 
| 23 | 
            +
                        end
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    attr_reader :company_info, :payroll_info, :transactions
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    private
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    def format_currency(number)
         | 
| 32 | 
            +
                      whole, decimal = format('%.2f', number).split('.')
         | 
| 33 | 
            +
                      whole.split(//).reverse.in_groups_of(3).map(&:reverse).map(&:join).reverse.join(',') + ".#{decimal}"
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    def template_file_path(name)
         | 
| 37 | 
            +
                      GEM_ROOT + "/lib/aub/payroll/summary_file/templates/#{name}"
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    def render_tilt_template(template_path)
         | 
| 41 | 
            +
                      Tilt.new(template_path).render(self)
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    def render(template, output = template, with: :tilt, from: :templates)
         | 
| 45 | 
            +
                      source_path = resolve_source(from, template)
         | 
| 46 | 
            +
                      body = render_body(source_path, with)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      File.open(output, 'w') { |fh| fh.write(body) }
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    def render_body(source_path, with)
         | 
| 52 | 
            +
                      case with
         | 
| 53 | 
            +
                      when :tilt
         | 
| 54 | 
            +
                        render_tilt_template(source_path)
         | 
| 55 | 
            +
                      when :copy
         | 
| 56 | 
            +
                        File.read(source_path)
         | 
| 57 | 
            +
                      else
         | 
| 58 | 
            +
                        raise "unhandled engine: #{with.inspect}"
         | 
| 59 | 
            +
                      end
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    def resolve_source(from, template)
         | 
| 63 | 
            +
                      case from
         | 
| 64 | 
            +
                      when :templates
         | 
| 65 | 
            +
                        template_file_path(template)
         | 
| 66 | 
            +
                      when :vendor
         | 
| 67 | 
            +
                        GEM_ROOT + "/vendor/#{template}"
         | 
| 68 | 
            +
                      else
         | 
| 69 | 
            +
                        raise "unhandled source: #{from.inspect}"
         | 
| 70 | 
            +
                      end
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module AUB
         | 
| 2 | 
            +
              module Payroll
         | 
| 3 | 
            +
                module SummaryFile
         | 
| 4 | 
            +
                  class PayrollInfo
         | 
| 5 | 
            +
                    include PhModel
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    attribute :period_start
         | 
| 8 | 
            +
                    attribute :period_end
         | 
| 9 | 
            +
                    attribute :pay_date
         | 
| 10 | 
            +
                    attribute :total
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    validates :period_start, :period_end, :pay_date, presence: true
         | 
| 13 | 
            +
                    validates :total, presence: true, numericality: true
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            doctype html
         | 
| 2 | 
            +
            html
         | 
| 3 | 
            +
              head
         | 
| 4 | 
            +
                link(rel='stylesheet' type='text/css' href='style.css')
         | 
| 5 | 
            +
              body.body
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                div
         | 
| 8 | 
            +
                  table(cellpadding="0" cellspacing="0")
         | 
| 9 | 
            +
                    thead
         | 
| 10 | 
            +
                      tr
         | 
| 11 | 
            +
                        td.spacer  
         | 
| 12 | 
            +
                        th.employee-name Employee's Name
         | 
| 13 | 
            +
                        th.account-number Savings Account No.
         | 
| 14 | 
            +
                        th.amount Amount
         | 
| 15 | 
            +
                        td.spacer  
         | 
| 16 | 
            +
                    tbody
         | 
| 17 | 
            +
                      - transactions.each do |transaction|
         | 
| 18 | 
            +
                        tr
         | 
| 19 | 
            +
                          td.spacer  
         | 
| 20 | 
            +
                          td.employee-name
         | 
| 21 | 
            +
                            = transaction.employee_name
         | 
| 22 | 
            +
                          td.account-number
         | 
| 23 | 
            +
                            = transaction.account_number
         | 
| 24 | 
            +
                          td.amount
         | 
| 25 | 
            +
                            = format_currency(transaction.amount)
         | 
| 26 | 
            +
                          td.spacer  
         | 
| 27 | 
            +
                    tfoot
         | 
| 28 | 
            +
                      tr
         | 
| 29 | 
            +
                        td(colspan=5)  
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  table.summary(cellpadding="0" cellspacing="0")
         | 
| 32 | 
            +
                    tbody
         | 
| 33 | 
            +
                      tr
         | 
| 34 | 
            +
                        td.spacer  
         | 
| 35 | 
            +
                        td.total-employees
         | 
| 36 | 
            +
                          ' Total No. Of Employees: #{transactions.length}
         | 
| 37 | 
            +
                        td.account-number
         | 
| 38 | 
            +
                        td.amount
         | 
| 39 | 
            +
                          span.label Total:
         | 
| 40 | 
            +
                          ' #{format_currency(payroll_info.total)}
         | 
| 41 | 
            +
                        td.spacer  
         | 
| 42 | 
            +
                      tr
         | 
| 43 | 
            +
                        td
         | 
| 44 | 
            +
                        td
         | 
| 45 | 
            +
                        td
         | 
| 46 | 
            +
                        td.amount
         | 
| 47 | 
            +
                          = '='*20
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  .nothing-follows
         | 
| 50 | 
            +
                    ' #{'-'*40} NOTHING FOLLOWS #{'-'*40}
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                div.signatures
         | 
| 53 | 
            +
                  table(cellspacing="0" cellpadding="0")
         | 
| 54 | 
            +
                    tr
         | 
| 55 | 
            +
                      td.prepared-by
         | 
| 56 | 
            +
                        'Prepared By:
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                        div.signature-line
         | 
| 59 | 
            +
                        div.name #{company_info.prepared_by_name_1}
         | 
| 60 | 
            +
                        div.spacer
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                        div.signature-line
         | 
| 63 | 
            +
                        div.name #{company_info.prepared_by_name_2}
         | 
| 64 | 
            +
                        div.name Authorized Signature
         | 
| 65 | 
            +
                      td
         | 
| 66 | 
            +
                      td.checked-by
         | 
| 67 | 
            +
                        'Checked By:
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                        div.signature-line
         | 
| 70 | 
            +
                        div.name #{company_info.checked_by_name_1}
         | 
| 71 | 
            +
                        div.spacer
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                        div.signature-line
         | 
| 74 | 
            +
                        div.name #{company_info.checked_by_name_2}
         | 
| 75 | 
            +
                        div.name Authorized Signature
         | 
| @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            /* Global Defaults */
         | 
| 2 | 
            +
            html, body {
         | 
| 3 | 
            +
                margin: 0px;
         | 
| 4 | 
            +
                padding: 0px;
         | 
| 5 | 
            +
                border: 0px;
         | 
| 6 | 
            +
            }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            body {
         | 
| 9 | 
            +
                font: 1em/1.25 Arial, Helvetica, sans-serif;
         | 
| 10 | 
            +
            }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            /* Headlines */
         | 
| 13 | 
            +
            h1, h2, h3, h4, h5, h6 {
         | 
| 14 | 
            +
                margin: 0;
         | 
| 15 | 
            +
                padding: 0;
         | 
| 16 | 
            +
                font-weight: normal;
         | 
| 17 | 
            +
                font-family: Arial, Helvetica, sans-serif;
         | 
| 18 | 
            +
            }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            /* Text Styles */
         | 
| 21 | 
            +
            p, th, td, li, dd, dt, ul, ol, blockquote, q, acronym, abbr, a, input, select, textarea {
         | 
| 22 | 
            +
                margin: 0;
         | 
| 23 | 
            +
                padding: 0;
         | 
| 24 | 
            +
                font: normal normal normal 1em/1.25 Arial, Helvetica, sans-serif;
         | 
| 25 | 
            +
            }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            blockquote {
         | 
| 28 | 
            +
                margin: 1.25em;
         | 
| 29 | 
            +
                padding: 1.25em
         | 
| 30 | 
            +
            }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            q {
         | 
| 33 | 
            +
                font-style: italic;
         | 
| 34 | 
            +
            }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            acronym, abbr {
         | 
| 37 | 
            +
                cursor: help;
         | 
| 38 | 
            +
                border-bottom: 1px dashed;
         | 
| 39 | 
            +
            }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            small {
         | 
| 42 | 
            +
                font-size: .85em;
         | 
| 43 | 
            +
            }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            big {
         | 
| 46 | 
            +
                font-size: 1.2em;
         | 
| 47 | 
            +
            }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            /* Links and Images */
         | 
| 50 | 
            +
            a, a:link, a:visited, a:active, a:hover {
         | 
| 51 | 
            +
                text-decoration: underline;
         | 
| 52 | 
            +
            }
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            img {
         | 
| 55 | 
            +
                border: none;
         | 
| 56 | 
            +
            }
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            /* Tables */
         | 
| 59 | 
            +
            table {
         | 
| 60 | 
            +
                margin: 0;
         | 
| 61 | 
            +
                padding: 0;
         | 
| 62 | 
            +
                border: none;
         | 
| 63 | 
            +
            }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            /* Forms */
         | 
| 66 | 
            +
            form {
         | 
| 67 | 
            +
                margin: 0;
         | 
| 68 | 
            +
                padding: 0;
         | 
| 69 | 
            +
                display: inline;
         | 
| 70 | 
            +
            }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            label {
         | 
| 73 | 
            +
                cursor: pointer;
         | 
| 74 | 
            +
            }
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            var getQueryParams = function () {
         | 
| 2 | 
            +
              var query = window.location.search.substring(1); // delete ?
         | 
| 3 | 
            +
              if (!query) {
         | 
| 4 | 
            +
                return false;
         | 
| 5 | 
            +
              }
         | 
| 6 | 
            +
              return _
         | 
| 7 | 
            +
                .chain(query.split('&'))
         | 
| 8 | 
            +
                .map(function (params) {
         | 
| 9 | 
            +
                  var p = params.split('=');
         | 
| 10 | 
            +
                  return [p[0], decodeURIComponent(p[1])];
         | 
| 11 | 
            +
                })
         | 
| 12 | 
            +
                .object()
         | 
| 13 | 
            +
                .value();
         | 
| 14 | 
            +
            };
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            function substituteQueryParams() {
         | 
| 17 | 
            +
              var vars = getQueryParams();
         | 
| 18 | 
            +
              _(['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection']).each(function(klass) {
         | 
| 19 | 
            +
                _(document.getElementsByClassName(klass)).each(function(element) {
         | 
| 20 | 
            +
                  element.textContent = vars[klass];
         | 
| 21 | 
            +
                });
         | 
| 22 | 
            +
              });
         | 
| 23 | 
            +
            }
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            doctype html
         | 
| 2 | 
            +
            html
         | 
| 3 | 
            +
              head
         | 
| 4 | 
            +
                link(rel='stylesheet' type='text/css' href='style.css')
         | 
| 5 | 
            +
                script(src='underscore-min.js' type='application/javascript')
         | 
| 6 | 
            +
                script(src='footer.js' type='application/javascript')
         | 
| 7 | 
            +
              body.footer(onload='substituteQueryParams()')
         | 
| 8 | 
            +
                div.page_number
         | 
| 9 | 
            +
                  span.label Page No.
         | 
| 10 | 
            +
                  span.page
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            doctype html
         | 
| 2 | 
            +
            html
         | 
| 3 | 
            +
              head
         | 
| 4 | 
            +
                link(rel='stylesheet' type='text/css' href='clear.css')
         | 
| 5 | 
            +
                link(rel='stylesheet' type='text/css' href='style.css')
         | 
| 6 | 
            +
              body.header
         | 
| 7 | 
            +
                div.company-info
         | 
| 8 | 
            +
                  div.company-name #{company_info.name}
         | 
| 9 | 
            +
                  div.address1 #{company_info.address1}
         | 
| 10 | 
            +
                  div.address2 #{company_info.address2}
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                div.instruction-text
         | 
| 13 | 
            +
                  div This is to authorize ASIA UNITED BANK, #{company_info.bank_branch} to debit #{format_currency(payroll_info.total)}
         | 
| 14 | 
            +
                  div From #{company_info.name} #{company_info.account_number} for #{payroll_info.period_start} to #{payroll_info.period_end}
         | 
| 15 | 
            +
                  div payroll period, to be credited on #{payroll_info.pay_date} to the individual accounts indicated below.
         | 
| @@ -0,0 +1,178 @@ | |
| 1 | 
            +
            body {
         | 
| 2 | 
            +
              font-family: monospace;
         | 
| 3 | 
            +
              margin: 0;
         | 
| 4 | 
            +
              padding: 0;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              tr {
         | 
| 7 | 
            +
                // the following is a black magic style that fixes an issue with THEAD doing weird things
         | 
| 8 | 
            +
                // on following pages, still needed for v0.12.3
         | 
| 9 | 
            +
                // see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1524
         | 
| 10 | 
            +
                page-break-inside: avoid;
         | 
| 11 | 
            +
              }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              &.header {
         | 
| 14 | 
            +
                font-size: 8pt;
         | 
| 15 | 
            +
                margin: 0 20pt;
         | 
| 16 | 
            +
                padding-bottom: 1pt;
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                .company-info {
         | 
| 19 | 
            +
                  font-weight: bold;
         | 
| 20 | 
            +
                  height: 56pt;
         | 
| 21 | 
            +
                  padding-top: 10pt;
         | 
| 22 | 
            +
                  text-transform: uppercase;
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  .company-name {
         | 
| 25 | 
            +
                    font-size: 2em;
         | 
| 26 | 
            +
                    margin-bottom: 0.25em;
         | 
| 27 | 
            +
                  }
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  .address1 {
         | 
| 30 | 
            +
                    font-size: 1.5em;
         | 
| 31 | 
            +
                    margin-bottom: 0.25em;
         | 
| 32 | 
            +
                  }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  .address2 {
         | 
| 35 | 
            +
                    font-size: 1.5em;
         | 
| 36 | 
            +
                    font-weight: normal;
         | 
| 37 | 
            +
                  }
         | 
| 38 | 
            +
                }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                .instruction-text {
         | 
| 41 | 
            +
                  line-height: 150%;
         | 
| 42 | 
            +
                }
         | 
| 43 | 
            +
              }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              &.footer {
         | 
| 46 | 
            +
                font-size: 8pt;
         | 
| 47 | 
            +
                margin: 0 20pt;
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                .page_number {
         | 
| 50 | 
            +
                  margin: 0 auto;
         | 
| 51 | 
            +
                  width: 100pt;
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  .page {
         | 
| 54 | 
            +
                    display: block;
         | 
| 55 | 
            +
                    float: right;
         | 
| 56 | 
            +
                  }
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
              }
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              &.body {
         | 
| 61 | 
            +
                $column1-width: 38%;
         | 
| 62 | 
            +
                $column2-width: 28%;
         | 
| 63 | 
            +
                $borders: 1pt solid black;
         | 
| 64 | 
            +
                padding-top: 1px;
         | 
| 65 | 
            +
                //$column2_width: 33%; # its just the leftover of the columns
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                table {
         | 
| 68 | 
            +
                  border-collapse: collapse;
         | 
| 69 | 
            +
                  width: 100%;
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  th {
         | 
| 72 | 
            +
                    font-weight: normal;
         | 
| 73 | 
            +
                    text-align: left;
         | 
| 74 | 
            +
                  }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  th,
         | 
| 77 | 
            +
                  td {
         | 
| 78 | 
            +
                    font-family: monospace;
         | 
| 79 | 
            +
                    font-size: 10pt;
         | 
| 80 | 
            +
                  }
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  tbody {
         | 
| 83 | 
            +
                    td {
         | 
| 84 | 
            +
                      padding: 2pt 0;
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                      &.amount {
         | 
| 87 | 
            +
                        text-align: right;
         | 
| 88 | 
            +
                      }
         | 
| 89 | 
            +
                    }
         | 
| 90 | 
            +
                  }
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  td.employee-name {
         | 
| 93 | 
            +
                    text-transform: uppercase;
         | 
| 94 | 
            +
                    width: $column1-width;
         | 
| 95 | 
            +
                  }
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  td.account-number {
         | 
| 98 | 
            +
                    width: $column2-width;
         | 
| 99 | 
            +
                  }
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                  td.spacer {
         | 
| 102 | 
            +
                    width: 20pt;
         | 
| 103 | 
            +
                  }
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  tfoot {
         | 
| 106 | 
            +
                    tr {
         | 
| 107 | 
            +
                      border-top: $borders;
         | 
| 108 | 
            +
                    }
         | 
| 109 | 
            +
                  }
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                  thead {
         | 
| 112 | 
            +
                    th.amount {
         | 
| 113 | 
            +
                      text-align: right;
         | 
| 114 | 
            +
                    }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    tr {
         | 
| 117 | 
            +
                      border-bottom: $borders;
         | 
| 118 | 
            +
                      border-top: $borders;
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                      th,
         | 
| 121 | 
            +
                      td {
         | 
| 122 | 
            +
                        padding: 0.75em 0;
         | 
| 123 | 
            +
                      }
         | 
| 124 | 
            +
                    }
         | 
| 125 | 
            +
                  }
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  &.summary {
         | 
| 128 | 
            +
                    page-break-inside: avoid;
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    td.total-employees {
         | 
| 131 | 
            +
                      width: $column1-width;
         | 
| 132 | 
            +
                    }
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    td.amount {
         | 
| 135 | 
            +
                      .label {
         | 
| 136 | 
            +
                        display: block;
         | 
| 137 | 
            +
                        float: left;
         | 
| 138 | 
            +
                      }
         | 
| 139 | 
            +
                    }
         | 
| 140 | 
            +
                  }
         | 
| 141 | 
            +
                }
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                .nothing-follows {
         | 
| 144 | 
            +
                  margin: 2pt 0;
         | 
| 145 | 
            +
                  text-align: center;
         | 
| 146 | 
            +
                }
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                .signatures {
         | 
| 149 | 
            +
                  padding: 0 20px;
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                  table {
         | 
| 152 | 
            +
                    text-transform: uppercase;
         | 
| 153 | 
            +
                    width: 100%;
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                    .signature-line {
         | 
| 156 | 
            +
                      border-bottom: $borders;
         | 
| 157 | 
            +
                      height: 2em;
         | 
| 158 | 
            +
                    }
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                    .name {
         | 
| 161 | 
            +
                      padding: 0.25em 0;
         | 
| 162 | 
            +
                    }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                    .spacer {
         | 
| 165 | 
            +
                      height: 2em;
         | 
| 166 | 
            +
                    }
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                    .prepared-by {
         | 
| 169 | 
            +
                      width: 33%;
         | 
| 170 | 
            +
                    }
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    .checked-by {
         | 
| 173 | 
            +
                      width: 33%;
         | 
| 174 | 
            +
                    }
         | 
| 175 | 
            +
                  }
         | 
| 176 | 
            +
                }
         | 
| 177 | 
            +
              }
         | 
| 178 | 
            +
            }
         |