agris 0.1.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 +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
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module AccountsReceivables
|
5
|
+
module Invoices
|
6
|
+
def invoice(invoice_location, invoice_number)
|
7
|
+
extract = Agris::Api::AccountsReceivables::SpecificInvoiceExtract
|
8
|
+
.new(invoice_location, invoice_number)
|
9
|
+
|
10
|
+
invoices([extract])
|
11
|
+
end
|
12
|
+
|
13
|
+
def invoices(extracts)
|
14
|
+
extract_documents(
|
15
|
+
Messages::QueryInvoiceDocuments.new(extracts),
|
16
|
+
Agris::Api::AccountsReceivables::Invoice
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
def invoices_changed_since(datetime, detail = false)
|
21
|
+
extract_documents(
|
22
|
+
Messages::QueryChangedInvoices.new(datetime, detail),
|
23
|
+
Agris::Api::AccountsReceivables::Invoice
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module AccountsReceivables
|
5
|
+
class SpecificInvoiceExtract
|
6
|
+
include ::Agris::XmlModel
|
7
|
+
|
8
|
+
attr_accessor :invoice_location, :invoice_no
|
9
|
+
|
10
|
+
def initialize(invoice_location, invoice_number)
|
11
|
+
@invoice_location = invoice_location
|
12
|
+
@invoice_no = invoice_number
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:disable Rails/TimeZone
|
3
|
+
module Agris
|
4
|
+
module Api
|
5
|
+
class DocumentQueryResponse
|
6
|
+
def initialize(output_hash, resource_type = nil)
|
7
|
+
@output_hash = output_hash
|
8
|
+
@objects = nil
|
9
|
+
@resource_type = resource_type if resource_type
|
10
|
+
end
|
11
|
+
|
12
|
+
def last_request_date_time
|
13
|
+
DateTime.parse(
|
14
|
+
@output_hash["#{resource_name}s"]['system']['lastrequestdatetime']
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def documents
|
19
|
+
@objects ||= parse
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def parse
|
25
|
+
resources
|
26
|
+
.map do |order_hash|
|
27
|
+
resource_type.from_xml_hash(order_hash)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def resource_name
|
32
|
+
@resource_name ||= resource_type
|
33
|
+
.name
|
34
|
+
.split('::')
|
35
|
+
.last
|
36
|
+
.downcase
|
37
|
+
end
|
38
|
+
|
39
|
+
def resource_type
|
40
|
+
@resource_type ||= Object.const_get(
|
41
|
+
self
|
42
|
+
.class
|
43
|
+
.name
|
44
|
+
.split('::')
|
45
|
+
.last
|
46
|
+
.chomp('ExtractResponse')
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def resources
|
51
|
+
# Wrap and flatten for single responses
|
52
|
+
[@output_hash["#{resource_name}s"][resource_name]]
|
53
|
+
.compact
|
54
|
+
.flatten
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# rubocop:enable Rails/TimeZone
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Grain
|
5
|
+
autoload :NewTicket, 'agris/api/grain/new_ticket'
|
6
|
+
autoload :NewTicketApplication, 'agris/api/grain/new_ticket_application'
|
7
|
+
autoload :NewTicketRemark, 'agris/api/grain/new_ticket_remark'
|
8
|
+
autoload :Tickets,
|
9
|
+
'agris/api/grain/tickets'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Grain
|
5
|
+
class NewTicket
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
in_out_code
|
10
|
+
ticket_location
|
11
|
+
ticket_number
|
12
|
+
type
|
13
|
+
shipment_date
|
14
|
+
entry_date
|
15
|
+
ship_to_from_id
|
16
|
+
commodity
|
17
|
+
variety_class
|
18
|
+
storage_bin
|
19
|
+
transport_mode
|
20
|
+
shipper_id
|
21
|
+
vehicle_id
|
22
|
+
other_ref
|
23
|
+
trancode_4
|
24
|
+
trancode_5
|
25
|
+
weight_base
|
26
|
+
grade_base
|
27
|
+
freight_status
|
28
|
+
disc_tables
|
29
|
+
net_quantity
|
30
|
+
gross_weight
|
31
|
+
tare_weight
|
32
|
+
freight_weight
|
33
|
+
freight_rate
|
34
|
+
additional_freight
|
35
|
+
cash_price
|
36
|
+
cash_basis
|
37
|
+
gross_date
|
38
|
+
gross_time
|
39
|
+
gross_entry_method
|
40
|
+
tare_date
|
41
|
+
tare_time
|
42
|
+
tare_entry_method
|
43
|
+
driver_id
|
44
|
+
car_set_date
|
45
|
+
notify_date
|
46
|
+
days_allowed
|
47
|
+
short_sample_number
|
48
|
+
add_update_reverse_option
|
49
|
+
adjust_inventory
|
50
|
+
freight_tax_percent
|
51
|
+
shipment_id
|
52
|
+
update_field_selection
|
53
|
+
grade_agency_id
|
54
|
+
grade_certificate_date
|
55
|
+
grade_certificate_number
|
56
|
+
weight_agency_id
|
57
|
+
weight_certificate_date
|
58
|
+
weight_certificate_number
|
59
|
+
hauler_id
|
60
|
+
weight_uom
|
61
|
+
quantity_uom
|
62
|
+
freight_currency
|
63
|
+
exchange_rate
|
64
|
+
exchange_rate_date
|
65
|
+
their_invoice_number
|
66
|
+
exec_id
|
67
|
+
reverse_instruction
|
68
|
+
first_4_discount_tables
|
69
|
+
sample_number
|
70
|
+
last_4_discount_tables
|
71
|
+
split_group
|
72
|
+
producer_id
|
73
|
+
farm
|
74
|
+
field
|
75
|
+
).freeze
|
76
|
+
|
77
|
+
attr_reader :record_type
|
78
|
+
attr_accessor(*ATTRIBUTE_NAMES)
|
79
|
+
|
80
|
+
def initialize(hash = {})
|
81
|
+
super
|
82
|
+
|
83
|
+
@record_type = 'GRNT0'
|
84
|
+
end
|
85
|
+
|
86
|
+
def add_application(application)
|
87
|
+
@applications ||= []
|
88
|
+
@applications << application
|
89
|
+
|
90
|
+
self
|
91
|
+
end
|
92
|
+
|
93
|
+
def add_remark(remark)
|
94
|
+
@remarks ||= []
|
95
|
+
@remarks << remark
|
96
|
+
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
def applications
|
101
|
+
@applications || []
|
102
|
+
end
|
103
|
+
|
104
|
+
def records
|
105
|
+
[self] + applications + remarks
|
106
|
+
end
|
107
|
+
|
108
|
+
def remarks
|
109
|
+
@remarks || []
|
110
|
+
end
|
111
|
+
|
112
|
+
def xml_ignore_attributes
|
113
|
+
%i(applications remarks)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Grain
|
5
|
+
class NewTicketApplication
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
apply_type
|
10
|
+
expected_apply_type
|
11
|
+
apply_name_id
|
12
|
+
apply_location
|
13
|
+
apply_reference
|
14
|
+
apply_reference_pricing
|
15
|
+
gross_quantity
|
16
|
+
net_quantity
|
17
|
+
position_quantity
|
18
|
+
apply_date
|
19
|
+
contract_variety_class
|
20
|
+
recalculate_discounts
|
21
|
+
).freeze
|
22
|
+
|
23
|
+
attr_reader :record_type
|
24
|
+
attr_accessor(*ATTRIBUTE_NAMES)
|
25
|
+
|
26
|
+
def initialize(hash = {})
|
27
|
+
super
|
28
|
+
|
29
|
+
@record_type = 'GRNT1'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Grain
|
5
|
+
class NewTicketRemark
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
number
|
10
|
+
value
|
11
|
+
).freeze
|
12
|
+
|
13
|
+
attr_reader :record_type
|
14
|
+
|
15
|
+
def initialize(hash = {})
|
16
|
+
super
|
17
|
+
|
18
|
+
@record_type = 'GRNT2'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Grain
|
5
|
+
module Tickets
|
6
|
+
# Create a new Grain ticket in Agris.
|
7
|
+
#
|
8
|
+
# In future I don't think we'll need a method per type of thing we want
|
9
|
+
# to create in Agris, but rather have a single import method that we
|
10
|
+
# just pass in the New*** model we want to create.
|
11
|
+
def create_ticket(ticket)
|
12
|
+
import(ticket)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
autoload :DeliveryTicket, 'agris/api/inventory/delivery_ticket'
|
6
|
+
autoload :DeliveryTicketLineItem,
|
7
|
+
'agris/api/inventory/delivery_ticket_line_item'
|
8
|
+
autoload :DeliveryTickets, 'agris/api/inventory/delivery_tickets'
|
9
|
+
autoload :Orders, 'agris/api/inventory/orders'
|
10
|
+
autoload :SpecificDeliveryTicketExtract,
|
11
|
+
'agris/api/inventory/specific_delivery_ticket_extract'
|
12
|
+
autoload :SpecificOrderExtract,
|
13
|
+
'agris/api/inventory/specific_order_extract'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
class DeliveryTicket
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
ticket_status
|
10
|
+
ticket_status_description
|
11
|
+
ticket_location
|
12
|
+
ticket_location_description
|
13
|
+
ticket_number
|
14
|
+
pickup_delivery
|
15
|
+
shipment_date
|
16
|
+
void_date
|
17
|
+
bill_to_id
|
18
|
+
bill_to_description
|
19
|
+
state_county
|
20
|
+
state_county_description
|
21
|
+
user_order_field_1
|
22
|
+
user_order_field_2
|
23
|
+
external_order_number
|
24
|
+
ship_to_id
|
25
|
+
ship_to_description
|
26
|
+
shipper_id
|
27
|
+
shipper_description
|
28
|
+
broker_id
|
29
|
+
broker_description
|
30
|
+
invoice_terms
|
31
|
+
terms_description
|
32
|
+
entry_date
|
33
|
+
delete
|
34
|
+
last_change_date_time
|
35
|
+
last_change_user_id
|
36
|
+
last_change_user_name
|
37
|
+
unique_id
|
38
|
+
).freeze
|
39
|
+
|
40
|
+
attr_reader(*(%w(line_items remarks tran_codes) + ATTRIBUTE_NAMES))
|
41
|
+
|
42
|
+
def self.from_xml_hash(hash)
|
43
|
+
super.tap do |delivery_ticket|
|
44
|
+
if hash['lineitems']
|
45
|
+
delivery_ticket.line_items.concat(
|
46
|
+
[hash['lineitems']['lineitem']]
|
47
|
+
.flatten
|
48
|
+
.map do |lineitem|
|
49
|
+
DeliveryTicketLineItem.from_xml_hash(lineitem)
|
50
|
+
end
|
51
|
+
)
|
52
|
+
end
|
53
|
+
if hash['remarks']
|
54
|
+
delivery_ticket.remarks.concat(
|
55
|
+
[hash['remarks']['remark']]
|
56
|
+
.flatten
|
57
|
+
.map do |remark|
|
58
|
+
Agris::Api::Remark.from_xml_hash(remark)
|
59
|
+
end
|
60
|
+
)
|
61
|
+
end
|
62
|
+
if hash['trancodes']
|
63
|
+
delivery_ticket.tran_codes.concat(
|
64
|
+
[hash['trancodes']['trancode']]
|
65
|
+
.flatten
|
66
|
+
.map do |trancode|
|
67
|
+
Agris::Api::TranCode.from_xml_hash(trancode)
|
68
|
+
end
|
69
|
+
)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize(hash = {})
|
75
|
+
super
|
76
|
+
|
77
|
+
@line_items = []
|
78
|
+
@remarks = []
|
79
|
+
@tran_codes = []
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
class DeliveryTicketLineItem
|
6
|
+
include XmlModel
|
7
|
+
|
8
|
+
ATTRIBUTE_NAMES = %w(
|
9
|
+
line_item_number
|
10
|
+
activity_location
|
11
|
+
activity_location_description
|
12
|
+
inventory_location
|
13
|
+
inventory_location_description
|
14
|
+
inventory_item
|
15
|
+
inventory_item_description
|
16
|
+
sub_item_1
|
17
|
+
sub_item_1_description
|
18
|
+
sub_item_2
|
19
|
+
product_category
|
20
|
+
category_description
|
21
|
+
individual_charge_id
|
22
|
+
individual_charge_description
|
23
|
+
order_location
|
24
|
+
order_location_description
|
25
|
+
order_number
|
26
|
+
weight_uom
|
27
|
+
weight_uom_description
|
28
|
+
quantity_uom
|
29
|
+
quantity_uom_description
|
30
|
+
price_uom
|
31
|
+
price_uom_description
|
32
|
+
other_reference
|
33
|
+
execution_id
|
34
|
+
execution_id_description
|
35
|
+
quantity
|
36
|
+
unit_price
|
37
|
+
total_price
|
38
|
+
unit_cost
|
39
|
+
total_cost
|
40
|
+
gross_weight
|
41
|
+
tare_weight
|
42
|
+
net_weight
|
43
|
+
invoice_number
|
44
|
+
invoice_location
|
45
|
+
invoice_location_description
|
46
|
+
in_blend
|
47
|
+
blend_number
|
48
|
+
formula_no
|
49
|
+
source_type
|
50
|
+
restricted_product
|
51
|
+
change_type
|
52
|
+
change_type_description
|
53
|
+
).freeze
|
54
|
+
|
55
|
+
attr_reader(*ATTRIBUTE_NAMES)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|