agris 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +36 -0
- data/Rakefile +6 -0
- data/agris.gemspec +30 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/agris.rb +61 -0
- data/lib/agris/api.rb +21 -0
- data/lib/agris/api/accounts_payables.rb +30 -0
- data/lib/agris/api/accounts_receivables.rb +11 -0
- data/lib/agris/api/accounts_receivables/invoice.rb +166 -0
- data/lib/agris/api/accounts_receivables/invoices.rb +29 -0
- data/lib/agris/api/accounts_receivables/specific_invoice_extract.rb +17 -0
- data/lib/agris/api/document_query_response.rb +59 -0
- data/lib/agris/api/grain.rb +12 -0
- data/lib/agris/api/grain/new_ticket.rb +118 -0
- data/lib/agris/api/grain/new_ticket_application.rb +34 -0
- data/lib/agris/api/grain/new_ticket_remark.rb +23 -0
- data/lib/agris/api/grain/tickets.rb +17 -0
- data/lib/agris/api/inventory.rb +16 -0
- data/lib/agris/api/inventory/delivery_ticket.rb +84 -0
- data/lib/agris/api/inventory/delivery_ticket_line_item.rb +59 -0
- data/lib/agris/api/inventory/delivery_tickets.rb +30 -0
- data/lib/agris/api/inventory/orders.rb +51 -0
- data/lib/agris/api/inventory/specific_delivery_ticket_extract.rb +17 -0
- data/lib/agris/api/inventory/specific_order_extract.rb +18 -0
- data/lib/agris/api/messages.rb +25 -0
- data/lib/agris/api/messages/import.rb +40 -0
- data/lib/agris/api/messages/message_base.rb +42 -0
- data/lib/agris/api/messages/query_base.rb +37 -0
- data/lib/agris/api/messages/query_changed_delivery_tickets.rb +41 -0
- data/lib/agris/api/messages/query_changed_invoices.rb +48 -0
- data/lib/agris/api/messages/query_changed_orders.rb +41 -0
- data/lib/agris/api/messages/query_delivery_ticket_documents.rb +35 -0
- data/lib/agris/api/messages/query_invoice_documents.rb +40 -0
- data/lib/agris/api/messages/query_order_documents.rb +35 -0
- data/lib/agris/api/new_order.rb +86 -0
- data/lib/agris/api/new_order_remark.rb +22 -0
- data/lib/agris/api/new_voucher.rb +113 -0
- data/lib/agris/api/order.rb +63 -0
- data/lib/agris/api/order_line.rb +32 -0
- data/lib/agris/api/post_result.rb +24 -0
- data/lib/agris/api/remark.rb +16 -0
- data/lib/agris/api/support.rb +77 -0
- data/lib/agris/api/tran_code.rb +17 -0
- data/lib/agris/client.rb +39 -0
- data/lib/agris/context.rb +6 -0
- data/lib/agris/credentials.rb +7 -0
- data/lib/agris/credentials/anonymous.rb +11 -0
- data/lib/agris/credentials/basic_auth.rb +15 -0
- data/lib/agris/process_message_response.rb +58 -0
- data/lib/agris/resources/post_sales_order.xml +93 -0
- data/lib/agris/resources/post_sales_order_response.xml +21 -0
- data/lib/agris/savon_request.rb +73 -0
- data/lib/agris/user_agent.rb +7 -0
- data/lib/agris/version.rb +3 -0
- data/lib/agris/xml_model.rb +62 -0
- metadata +188 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9a30b79856223878a7295a197f00c5e68b8dc079
|
4
|
+
data.tar.gz: 1ad201a273cef40da76757ab9d8fda45adddd7b7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8636ee3bfdb526fb6d8750c0b6b17a410fc2e0367cd16ab2e822f108e3d388499bc6abe7e56e1b670f745b95a2fa30f755f6cad3ac99075d1c97785c632c75e0
|
7
|
+
data.tar.gz: 59f30115750660e43849d8e1b9daf19965c4c77abfeaacc021cbc2d1cf34401ead9a817c30ae5c61eac381514eee5f99555975ab6aa2edf44fd22e3fd10a3b07
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Western Milling, LLC
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# Agris
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/agris`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'agris'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install agris
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/John Gray/agris.
|
36
|
+
|
data/Rakefile
ADDED
data/agris.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'agris/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "agris"
|
8
|
+
spec.version = Agris::VERSION
|
9
|
+
spec.authors = ["John Gray"]
|
10
|
+
spec.email = ["wopr42@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Ruby client library for Agris API}
|
13
|
+
spec.homepage = 'https://github.com/westernmilling/agris.rb'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
spec.bindir = "exe"
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_dependency 'activesupport', '~> 5.0'
|
24
|
+
spec.add_dependency 'savon', '~> 2.11'
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.14"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
29
|
+
spec.add_development_dependency 'webmock', '~> 2.3'
|
30
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "agris"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/lib/agris.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
3
|
+
|
4
|
+
require 'active_support/core_ext/hash/conversions'
|
5
|
+
require 'active_support/core_ext/hash/slice'
|
6
|
+
require 'savon'
|
7
|
+
|
8
|
+
module Agris
|
9
|
+
class ApiError < StandardError; end
|
10
|
+
class MessageError < StandardError; end
|
11
|
+
class SystemError < StandardError; end
|
12
|
+
class UnknownError < StandardError; end
|
13
|
+
|
14
|
+
class << self
|
15
|
+
attr_accessor :credentials,
|
16
|
+
:context,
|
17
|
+
:logger,
|
18
|
+
:proxy_url,
|
19
|
+
:request_type,
|
20
|
+
:user_agent
|
21
|
+
# ```ruby
|
22
|
+
# Agris.configure do |config|
|
23
|
+
# config.credentials = Agris::Credentials::Anonymous.new
|
24
|
+
# config.context = Agris::Context.new(
|
25
|
+
# 'http://localhost:3000',
|
26
|
+
# '001',
|
27
|
+
# '\\host\apps\Agris\datasets',
|
28
|
+
# 'AgrisDB',
|
29
|
+
# 'bob',
|
30
|
+
# 'fred'
|
31
|
+
# )
|
32
|
+
# config.request_type = Agris::SavonRequest
|
33
|
+
# config.logger = Logger.new(STDOUT)
|
34
|
+
# config.user_agent = 'Otis'
|
35
|
+
# end
|
36
|
+
# ```
|
37
|
+
# elsewhere
|
38
|
+
#
|
39
|
+
# ```ruby
|
40
|
+
# client = Agris::Client.new
|
41
|
+
# ```
|
42
|
+
def configure
|
43
|
+
yield self
|
44
|
+
true
|
45
|
+
end
|
46
|
+
|
47
|
+
def root
|
48
|
+
File.expand_path('../../', __FILE__)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
autoload :Api, 'agris/api'
|
53
|
+
autoload :Client, 'agris/client'
|
54
|
+
autoload :Context, 'agris/context'
|
55
|
+
autoload :Credentials, 'agris/credentials'
|
56
|
+
autoload :HTTPartyRequest, 'agris/httparty_request'
|
57
|
+
autoload :ProcessMessageResponse, 'agris/process_message_response'
|
58
|
+
autoload :SavonRequest, 'agris/savon_request'
|
59
|
+
autoload :UserAgent, 'agris/user_agent'
|
60
|
+
autoload :XmlModel, 'agris/xml_model'
|
61
|
+
end
|
data/lib/agris/api.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
autoload :AccountsReceivables, 'agris/api/accounts_receivables'
|
5
|
+
autoload :AccountsPayables, 'agris/api/accounts_payables'
|
6
|
+
autoload :DocumentQueryResponse,
|
7
|
+
'agris/api/document_query_response'
|
8
|
+
autoload :Grain, 'agris/api/grain'
|
9
|
+
autoload :Inventory, 'agris/api/inventory'
|
10
|
+
autoload :Messages, 'agris/api/messages'
|
11
|
+
autoload :NewOrder, 'agris/api/new_order'
|
12
|
+
autoload :NewOrderRemark, 'agris/api/new_order_remark'
|
13
|
+
autoload :NewVoucher, 'agris/api/new_voucher'
|
14
|
+
autoload :Order, 'agris/api/order'
|
15
|
+
autoload :OrderLine, 'agris/api/order_line'
|
16
|
+
autoload :PostResult, 'agris/api/post_result'
|
17
|
+
autoload :Remark, 'agris/api/remark'
|
18
|
+
autoload :Support, 'agris/api/support'
|
19
|
+
autoload :TranCode, 'agris/api/tran_code'
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Agris
|
4
|
+
module Api
|
5
|
+
module AccountsPayables
|
6
|
+
module Vouchers
|
7
|
+
def create_voucher(voucher)
|
8
|
+
response = @request.process_message(
|
9
|
+
Gyoku.xml(xml: context_hash),
|
10
|
+
82_320,
|
11
|
+
create_post_payload_xml(convert_voucher_to_details(voucher))
|
12
|
+
)
|
13
|
+
|
14
|
+
PostResult.new(response)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
# NB: We should probably refactor this into a class and write tests
|
20
|
+
# to verify conversion of a sales model to an expected payload.
|
21
|
+
def convert_voucher_to_details(voucher)
|
22
|
+
details = []
|
23
|
+
details << voucher.to_xml_hash
|
24
|
+
details << voucher.details.map(&:to_xml_hash)
|
25
|
+
details
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module AccountsReceivables
|
5
|
+
autoload :Invoice, 'agris/api/accounts_receivables/invoice'
|
6
|
+
autoload :Invoices, 'agris/api/accounts_receivables/invoices'
|
7
|
+
autoload :SpecificInvoiceExtract,
|
8
|
+
'agris/api/accounts_receivables/specific_invoice_extract'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module AccountsReceivables
|
5
|
+
class Invoice
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
invoice_location
|
10
|
+
invoice_location_description
|
11
|
+
invoice_no
|
12
|
+
invoice_date
|
13
|
+
ship_date
|
14
|
+
pickup_delivery
|
15
|
+
due_date
|
16
|
+
discount_date
|
17
|
+
original_date
|
18
|
+
last_pay_date
|
19
|
+
trans_status
|
20
|
+
tran_status_desc
|
21
|
+
aging_period
|
22
|
+
aging_period_description
|
23
|
+
doc_type
|
24
|
+
doc_type_desc
|
25
|
+
invoice_desc
|
26
|
+
ref_order_no
|
27
|
+
xref_doc_loc
|
28
|
+
xref_doc_loc_description
|
29
|
+
xref_doc
|
30
|
+
days_to_pay
|
31
|
+
terms_code
|
32
|
+
terms_desc
|
33
|
+
first_inv_settle_no
|
34
|
+
name_id_type
|
35
|
+
name_id_type_desc
|
36
|
+
invoice_type
|
37
|
+
invoice_type_desc
|
38
|
+
state_county_code
|
39
|
+
state_county_desc
|
40
|
+
usr_order_field_1
|
41
|
+
usr_order_field_2
|
42
|
+
usr_invoice_field1
|
43
|
+
usr_invoice_field2
|
44
|
+
bill_to_id
|
45
|
+
bill_to_description
|
46
|
+
ship_to_id
|
47
|
+
ship_to_description
|
48
|
+
shipper_id
|
49
|
+
shipper_description
|
50
|
+
agent_id
|
51
|
+
agent_description
|
52
|
+
invoice_amount
|
53
|
+
discount_amount
|
54
|
+
applied_amount
|
55
|
+
due_amount
|
56
|
+
net_amount
|
57
|
+
discount_remaining
|
58
|
+
discount_applied
|
59
|
+
sales_tax
|
60
|
+
field_history_updated
|
61
|
+
use_standard_discount_ratio
|
62
|
+
delete
|
63
|
+
lastchange_datetime
|
64
|
+
lastchange_user_id
|
65
|
+
lastchange_user_name
|
66
|
+
currency_code
|
67
|
+
currency_description
|
68
|
+
exchange_rate
|
69
|
+
exchange_rate_date
|
70
|
+
integration_guid
|
71
|
+
unique_id
|
72
|
+
).freeze
|
73
|
+
|
74
|
+
attr_reader(*(%w(line_items) + ATTRIBUTE_NAMES))
|
75
|
+
|
76
|
+
def self.from_xml_hash(hash)
|
77
|
+
super.tap do |document|
|
78
|
+
if hash['lineitems']
|
79
|
+
document.line_items.concat(
|
80
|
+
[hash['lineitems']['lineitem']]
|
81
|
+
.flatten
|
82
|
+
.map do |lineitem|
|
83
|
+
LineItem.from_xml_hash(lineitem)
|
84
|
+
end
|
85
|
+
)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def initialize(hash = {})
|
91
|
+
super
|
92
|
+
|
93
|
+
@line_items = []
|
94
|
+
end
|
95
|
+
|
96
|
+
class LineItem
|
97
|
+
include XmlModel
|
98
|
+
|
99
|
+
ATTRIBUTE_NAMES = %w(
|
100
|
+
line_item_no
|
101
|
+
pricing_no
|
102
|
+
item_loc
|
103
|
+
item_loc_desc
|
104
|
+
item_no
|
105
|
+
item_desc
|
106
|
+
sub_item_1
|
107
|
+
sub_item_1_desc
|
108
|
+
sub_item_2
|
109
|
+
category
|
110
|
+
category_desc
|
111
|
+
category_type
|
112
|
+
category_type_desc
|
113
|
+
qty
|
114
|
+
qty_uom
|
115
|
+
qty_uom_desc
|
116
|
+
unit_price
|
117
|
+
total_price
|
118
|
+
pre_promo_price
|
119
|
+
discount_rate
|
120
|
+
original_qty
|
121
|
+
split_percent
|
122
|
+
unit_cost
|
123
|
+
total_cost
|
124
|
+
price_uom
|
125
|
+
price_uom_desc
|
126
|
+
order_loc
|
127
|
+
order_loc_desc
|
128
|
+
order_no
|
129
|
+
other_ref
|
130
|
+
exec_id_no
|
131
|
+
exec_id_description
|
132
|
+
act_loc
|
133
|
+
act_loc_desc
|
134
|
+
sales_tax_amt
|
135
|
+
scale_ticket_num
|
136
|
+
weight_uom
|
137
|
+
weight_uom_desc
|
138
|
+
gross_wt
|
139
|
+
tare_wt
|
140
|
+
net_wt
|
141
|
+
del_ticket_loc
|
142
|
+
del_ticket_loc_desc
|
143
|
+
del_ticket_no
|
144
|
+
contract_loc
|
145
|
+
contract_loc_desc
|
146
|
+
contract_no
|
147
|
+
item_type
|
148
|
+
item_type_description
|
149
|
+
in_blend
|
150
|
+
source_type
|
151
|
+
blend_no
|
152
|
+
formula_no
|
153
|
+
source_id
|
154
|
+
target_p_est
|
155
|
+
change_type
|
156
|
+
change_type_description
|
157
|
+
cost_adjustment_status
|
158
|
+
cost_adjustment_description
|
159
|
+
).freeze
|
160
|
+
|
161
|
+
attr_reader(*ATTRIBUTE_NAMES)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|