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
data/.scss-lint.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
exclude:
|
2
|
+
- '*.min.css'
|
3
|
+
- 'vendor/assets/**/*'
|
4
|
+
- 'node_modules/**/*'
|
5
|
+
- 'coverage/**/*'
|
6
|
+
|
7
|
+
linters:
|
8
|
+
ColorKeyword:
|
9
|
+
enabled: false
|
10
|
+
Indentation:
|
11
|
+
width: 2
|
12
|
+
character: "space"
|
13
|
+
LeadingZero:
|
14
|
+
style: "include_zero"
|
15
|
+
ColorVariable:
|
16
|
+
enabled: false
|
17
|
+
Comment:
|
18
|
+
enabled: false
|
19
|
+
SelectorDepth:
|
20
|
+
max_depth: 5
|
21
|
+
NestingDepth:
|
22
|
+
max_depth: 5
|
23
|
+
QualifyingElement:
|
24
|
+
allow_element_with_attribute: true
|
25
|
+
allow_element_with_class: true
|
data/.travis.yml
CHANGED
@@ -1,3 +1,18 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
3
|
- 2.1.6
|
4
|
+
|
5
|
+
env:
|
6
|
+
- CI=true
|
7
|
+
|
8
|
+
before_install:
|
9
|
+
- PWD=`pwd`
|
10
|
+
- "echo '## Installing dependencies'"
|
11
|
+
- "sudo apt-get update"
|
12
|
+
- "sudo apt-get install -y openssl build-essential xorg libssl-dev xfonts-75dpi"
|
13
|
+
- "echo '## Downloading wkhtmltopdf'"
|
14
|
+
- "wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-wheezy-amd64.deb"
|
15
|
+
- "echo '## Installing wkhtmltox'"
|
16
|
+
- "sudo dpkg -i wkhtmltox-0.12.2.1_linux-wheezy-amd64.deb"
|
17
|
+
- WHICH_WK=`which wkhtmltopdf`
|
18
|
+
- "export WKHTMLTOPDF_CMD=$WHICH_WK"
|
data/DEPLOYING.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## Setup
|
2
|
+
|
3
|
+
In order to deploy a new version of the gem into the wild ...
|
4
|
+
|
5
|
+
You will need to configure your github api token for the changelog.
|
6
|
+
|
7
|
+
Generate a new token for changelogs [here](https://github.com/settings/tokens/new).
|
8
|
+
|
9
|
+
add:
|
10
|
+
|
11
|
+
```bash
|
12
|
+
export CHANGELOG_GITHUB_TOKEN=YOUR_CHANGELOG_API_TOKEN
|
13
|
+
```
|
14
|
+
|
15
|
+
somewhere in your shell init. (ie .zshrc or simillar)
|
16
|
+
|
17
|
+
## Deploying
|
18
|
+
|
19
|
+
1. Update `lib/aub-payroll/version.rb`
|
20
|
+
2. Commit the changed files with the version number eg: `1.8.0`
|
21
|
+
3. Push this to git
|
22
|
+
4. Run `rake release`
|
23
|
+
5. Run `rake changelog` (has to be ran after release since its based on github tagging)
|
24
|
+
6. Commit the changed changelog named something like `changelog for 1.8.0`
|
25
|
+
7. Push this to git
|
data/README.md
CHANGED
@@ -24,23 +24,72 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
+
### Configuration
|
28
|
+
|
29
|
+
This gem uses wkhtmltopdf, it has been tested against version 0.12.3
|
30
|
+
|
31
|
+
If you'r wkhtmltopdf binary is different from the default, you can set it in the gem confuguration as follows:
|
32
|
+
|
27
33
|
```ruby
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
{ account_number: "001120001146", amount: 500.00 },
|
35
|
-
{ account_number: "001120001146", amount: 882.50 },
|
36
|
-
{ account_number: "001120001146", amount: 857.50 },
|
37
|
-
{ account_number: "001120001146", amount: 1_044.00 },
|
38
|
-
{ account_number: "001120001146", amount: 1_612.50 }
|
39
|
-
]
|
34
|
+
AUB::Payroll.configure do |c|
|
35
|
+
c.wkhtmltopdf_bin = 'wkhtmltopdf-0.12.3'
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
### EPF Bank File
|
40
40
|
|
41
|
+
```ruby
|
42
|
+
file = AUB::Payroll::EPFFile.new company_name: "StyroPrints",
|
43
|
+
date: Date.new(2000, 6, 2),
|
44
|
+
transactions: [
|
45
|
+
{ account_number: "001120001146", amount: 540.00 },
|
46
|
+
{ account_number: "001120001146", amount: 921.00 },
|
47
|
+
{ account_number: "001120001146", amount: 816.25 },
|
48
|
+
{ account_number: "001120001146", amount: 500.00 },
|
49
|
+
{ account_number: "001120001146", amount: 882.50 },
|
50
|
+
{ account_number: "001120001146", amount: 857.50 },
|
51
|
+
{ account_number: "001120001146", amount: 1_044.00 },
|
52
|
+
{ account_number: "001120001146", amount: 1_612.50 }
|
53
|
+
]
|
54
|
+
|
41
55
|
File.write "payroll.epf", file.content
|
42
56
|
```
|
43
57
|
|
58
|
+
### Summary PDF File
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
company_info = {
|
62
|
+
name: 'SomeCorp',
|
63
|
+
account_number: '12345678',
|
64
|
+
bank_branch: 'SomeBranch',
|
65
|
+
address1: '123 some address',
|
66
|
+
address2: '543 some more addresss',
|
67
|
+
prepared_by_name_1: 'William Samson',
|
68
|
+
prepared_by_name_2: 'Junior P. Santos',
|
69
|
+
checked_by_name_1: 'Winnie Po',
|
70
|
+
checked_by_name_2: 'Paul Sen',
|
71
|
+
}
|
72
|
+
|
73
|
+
transactions = [
|
74
|
+
{
|
75
|
+
employee_name: 'John Doe',
|
76
|
+
account_number: '12345678',
|
77
|
+
amount: 1235.45,
|
78
|
+
}
|
79
|
+
] * 47 # ok fine, this is a repeating example, but you'd have real data here :)
|
80
|
+
|
81
|
+
payroll_info = {
|
82
|
+
period_start: Date.new(2010, 1, 1),
|
83
|
+
period_end: Date.new(2010, 1, 31),
|
84
|
+
pay_date: Date.new(2010, 2, 5),
|
85
|
+
total: transactions.sum { |t| t[:amount] },
|
86
|
+
}
|
87
|
+
|
88
|
+
pdf = AUB::Payroll::SummaryFile.generate(company_info: company_info, payroll_info: payroll_info, transactions: transactions)
|
89
|
+
|
90
|
+
File.write "summary.pdf", pdf
|
91
|
+
```
|
92
|
+
|
44
93
|
## Development
|
45
94
|
|
46
95
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/aub-payroll.gemspec
CHANGED
@@ -4,25 +4,35 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'aub/payroll/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'aub-payroll'
|
8
8
|
spec.version = AUB::Payroll::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Ronald Maravilla']
|
10
|
+
spec.email = ['rmaravilla@payrollhero.com']
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
12
|
+
spec.summary = 'An AUB Payroll File Generator.'
|
13
|
+
spec.description = 'An AUB Payroll File Generator.'
|
14
|
+
spec.homepage = 'https://github.com/payrollhero/aub-payroll'
|
15
|
+
spec.license = 'BSD-3-Clause'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
-
spec.bindir =
|
18
|
+
spec.bindir = 'exe'
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
+
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_development_dependency 'pry'
|
26
|
+
spec.add_development_dependency 'shotgun'
|
27
|
+
spec.add_development_dependency 'pdf_spec'
|
28
|
+
spec.add_development_dependency 'github_changelog_generator'
|
25
29
|
|
26
|
-
spec.add_dependency
|
27
|
-
spec.add_dependency
|
30
|
+
spec.add_dependency 'activesupport'
|
31
|
+
spec.add_dependency 'activemodel'
|
32
|
+
spec.add_dependency 'pdfkit'
|
33
|
+
spec.add_dependency 'ph_model'
|
34
|
+
spec.add_dependency 'tilt'
|
35
|
+
spec.add_dependency 'slim'
|
36
|
+
spec.add_dependency 'sass'
|
37
|
+
spec.add_dependency 'configurations', '~> 2.2.0'
|
28
38
|
end
|
data/lib/aub/payroll.rb
CHANGED
@@ -3,11 +3,26 @@ require "active_support"
|
|
3
3
|
require "active_support/dependencies/autoload"
|
4
4
|
require "active_support/core_ext/enumerable"
|
5
5
|
|
6
|
+
require 'pdfkit'
|
7
|
+
require 'ph_model'
|
8
|
+
require 'tilt'
|
9
|
+
require 'configurations'
|
10
|
+
|
6
11
|
module AUB
|
7
12
|
module Payroll
|
8
13
|
extend ActiveSupport::Autoload
|
14
|
+
include Configurations
|
15
|
+
|
16
|
+
configurable :wkhtmltopdf_bin
|
17
|
+
|
18
|
+
configuration_defaults do |c|
|
19
|
+
c.wkhtmltopdf_bin = 'wkhtmltopdf'
|
20
|
+
end
|
9
21
|
|
10
22
|
autoload :Errors
|
11
|
-
autoload :
|
23
|
+
autoload :EPFFile
|
24
|
+
autoload :SummaryFile
|
25
|
+
|
26
|
+
GEM_ROOT = File.expand_path(File.dirname(__FILE__) + '/../..')
|
12
27
|
end
|
13
28
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'active_model'
|
2
2
|
|
3
3
|
module AUB
|
4
4
|
module Payroll
|
5
|
-
class
|
5
|
+
class EPFFile::Footer
|
6
6
|
include ActiveModel::Model
|
7
7
|
|
8
8
|
attr_accessor :number_of_records, :total_amount
|
@@ -17,24 +17,23 @@ module AUB
|
|
17
17
|
raise Errors::Invalid, errors.full_messages.to_sentence unless valid?
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
20
|
def to_s
|
22
21
|
[
|
23
|
-
|
22
|
+
'EF', # marks the end of file
|
24
23
|
formatted_number_of_records,
|
25
24
|
formatted_total_amount,
|
26
|
-
|
25
|
+
'0' * 27,
|
27
26
|
].join
|
28
27
|
end
|
29
28
|
|
30
29
|
private
|
31
30
|
|
32
31
|
def formatted_number_of_records
|
33
|
-
|
32
|
+
format '%06d', number_of_records
|
34
33
|
end
|
35
34
|
|
36
35
|
def formatted_total_amount
|
37
|
-
|
36
|
+
format '%015.2f', total_amount
|
38
37
|
end
|
39
38
|
end
|
40
39
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'active_model'
|
2
2
|
|
3
3
|
module AUB
|
4
4
|
module Payroll
|
5
|
-
class
|
5
|
+
class EPFFile::Header
|
6
6
|
include ActiveModel::Model
|
7
7
|
|
8
8
|
attr_accessor :company_name, :date
|
@@ -17,10 +17,9 @@ module AUB
|
|
17
17
|
raise Errors::Invalid, errors.full_messages.to_sentence unless valid?
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
20
|
def to_s
|
22
21
|
[
|
23
|
-
|
22
|
+
'BF', # marks the beginning of file
|
24
23
|
formatted_company_name,
|
25
24
|
formatted_date,
|
26
25
|
].join
|
@@ -33,7 +32,7 @@ module AUB
|
|
33
32
|
end
|
34
33
|
|
35
34
|
def formatted_date
|
36
|
-
date.strftime
|
35
|
+
date.strftime '%Y%m%d'
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require 'active_model'
|
2
2
|
|
3
3
|
module AUB
|
4
4
|
module Payroll
|
5
|
-
class
|
5
|
+
class EPFFile::Row
|
6
6
|
include ActiveModel::Model
|
7
7
|
|
8
8
|
attr_accessor :account_number, :amount
|
@@ -17,20 +17,19 @@ module AUB
|
|
17
17
|
raise Errors::Invalid, errors.full_messages.to_sentence unless valid?
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
20
|
def to_s
|
22
21
|
[
|
23
|
-
|
22
|
+
'01',
|
24
23
|
account_number,
|
25
24
|
formatted_amount,
|
26
|
-
|
25
|
+
'0' * 22
|
27
26
|
].join
|
28
27
|
end
|
29
28
|
|
30
29
|
private
|
31
30
|
|
32
31
|
def formatted_amount
|
33
|
-
|
32
|
+
format '%014.2f', amount
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AUB
|
2
|
+
module Payroll
|
3
|
+
module SummaryFile
|
4
|
+
extend ActiveSupport::Autoload
|
5
|
+
|
6
|
+
autoload :Generator
|
7
|
+
autoload :HTMLGenerator
|
8
|
+
autoload :CompanyInfo
|
9
|
+
autoload :PayrollInfo
|
10
|
+
autoload :Transaction
|
11
|
+
autoload :CustomPDFKit
|
12
|
+
|
13
|
+
def self.generate(*args)
|
14
|
+
Generator.new(*args).generate
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module AUB
|
2
|
+
module Payroll
|
3
|
+
module SummaryFile
|
4
|
+
class CompanyInfo
|
5
|
+
include PhModel
|
6
|
+
|
7
|
+
attribute :name
|
8
|
+
attribute :account_number
|
9
|
+
attribute :address1
|
10
|
+
attribute :address2
|
11
|
+
attribute :bank_branch
|
12
|
+
|
13
|
+
attribute :prepared_by_name_1
|
14
|
+
attribute :prepared_by_name_2
|
15
|
+
attribute :checked_by_name_1
|
16
|
+
attribute :checked_by_name_2
|
17
|
+
|
18
|
+
validates :name, :account_number, :bank_branch, presence: true
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module AUB
|
2
|
+
module Payroll
|
3
|
+
module SummaryFile
|
4
|
+
|
5
|
+
# just overriding executable so its easy to configure this for the gem directly
|
6
|
+
class CustomPDFKit < PDFKit
|
7
|
+
def executable
|
8
|
+
AUB::Payroll.configuration.wkhtmltopdf_bin
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module AUB
|
2
|
+
module Payroll
|
3
|
+
module SummaryFile
|
4
|
+
class Generator
|
5
|
+
|
6
|
+
def initialize(company_info:, payroll_info:, transactions:)
|
7
|
+
@company_info = CompanyInfo.build(company_info)
|
8
|
+
@payroll_info = PayrollInfo.build(payroll_info)
|
9
|
+
@transactions = transactions.map { |transaction| Transaction.build(transaction) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate
|
13
|
+
html_generator.generate do
|
14
|
+
kit = File.open('body.html', 'r') do |body_file|
|
15
|
+
options = {
|
16
|
+
page_size: 'Letter',
|
17
|
+
header_html: 'header.html',
|
18
|
+
footer_html: 'footer.html',
|
19
|
+
margin_top: 38,
|
20
|
+
margin_bottom: 5,
|
21
|
+
margin_left: 0,
|
22
|
+
margin_right: 0,
|
23
|
+
}
|
24
|
+
CustomPDFKit.new(body_file, options)
|
25
|
+
end
|
26
|
+
kit.to_pdf
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def html_generator
|
31
|
+
HTMLGenerator.new(company_info: @company_info, payroll_info: @payroll_info, transactions: @transactions)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|