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,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
module DeliveryTickets
|
6
|
+
def delivery_ticket(ticket_location, ticket_number)
|
7
|
+
extract = SpecificDeliveryTicketExtract.new(
|
8
|
+
ticket_location, ticket_number
|
9
|
+
)
|
10
|
+
|
11
|
+
delivery_tickets([extract])
|
12
|
+
end
|
13
|
+
|
14
|
+
def delivery_tickets(extracts)
|
15
|
+
extract_documents(
|
16
|
+
Messages::QueryDeliveryTicketDocuments.new(extracts),
|
17
|
+
DeliveryTicket
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def delivery_tickets_changed_since(datetime)
|
22
|
+
extract_documents(
|
23
|
+
Messages::QueryChangedDeliveryTickets.new(datetime),
|
24
|
+
DeliveryTicket
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
module Orders
|
6
|
+
def create_order(order)
|
7
|
+
response = @request.process_message(
|
8
|
+
Gyoku.xml(xml: context_hash),
|
9
|
+
82_320,
|
10
|
+
create_post_payload_xml(convert_order_to_details(order))
|
11
|
+
)
|
12
|
+
|
13
|
+
PostResult.new(response)
|
14
|
+
end
|
15
|
+
|
16
|
+
def order(order_location, order_number, order_type = 'S')
|
17
|
+
extract = SpecificOrderExtract.new(
|
18
|
+
order_location, order_number, order_type
|
19
|
+
)
|
20
|
+
|
21
|
+
orders([extract])
|
22
|
+
end
|
23
|
+
|
24
|
+
def orders(order_extracts)
|
25
|
+
extract_documents(
|
26
|
+
Messages::QueryOrderDocuments.new(order_extracts),
|
27
|
+
Agris::Api::Order
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def orders_changed_since(datetime)
|
32
|
+
extract_documents(
|
33
|
+
Messages::QueryChangedOrders.new(datetime),
|
34
|
+
Agris::Api::Order
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
# NB: We should probably refactor this into a class and write tests
|
41
|
+
# to verify conversion of a sales model to an expected payload.
|
42
|
+
def convert_order_to_details(order)
|
43
|
+
details = []
|
44
|
+
details << order.to_xml_hash
|
45
|
+
details << order.remarks.map(&:to_xml_hash)
|
46
|
+
details
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
class SpecificDeliveryTicketExtract
|
6
|
+
include ::Agris::XmlModel
|
7
|
+
|
8
|
+
attr_accessor :ticket_location, :ticket_number
|
9
|
+
|
10
|
+
def initialize(ticket_location, ticket_number)
|
11
|
+
@ticket_location = ticket_location
|
12
|
+
@ticket_number = ticket_number
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Inventory
|
5
|
+
class SpecificOrderExtract
|
6
|
+
include ::Agris::XmlModel
|
7
|
+
|
8
|
+
attr_accessor :order_location, :order_number, :order_type
|
9
|
+
|
10
|
+
def initialize(order_location, order_number, order_type)
|
11
|
+
@order_location = order_location
|
12
|
+
@order_number = order_number
|
13
|
+
@order_type = order_type
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
autoload :MessageBase,
|
6
|
+
'agris/api/messages/message_base'
|
7
|
+
autoload :Import,
|
8
|
+
'agris/api/messages/import'
|
9
|
+
autoload :QueryBase,
|
10
|
+
'agris/api/messages/query_base'
|
11
|
+
autoload :QueryChangedDeliveryTickets,
|
12
|
+
'agris/api/messages/query_changed_delivery_tickets'
|
13
|
+
autoload :QueryChangedInvoices,
|
14
|
+
'agris/api/messages/query_changed_invoices'
|
15
|
+
autoload :QueryChangedOrders,
|
16
|
+
'agris/api/messages/query_changed_orders'
|
17
|
+
autoload :QueryDeliveryTicketDocuments,
|
18
|
+
'agris/api/messages/query_delivery_ticket_documents'
|
19
|
+
autoload :QueryInvoiceDocuments,
|
20
|
+
'agris/api/messages/query_invoice_documents'
|
21
|
+
autoload :QueryOrderDocuments,
|
22
|
+
'agris/api/messages/query_order_documents'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class Import < MessageBase
|
6
|
+
def initialize(model)
|
7
|
+
@model = model
|
8
|
+
end
|
9
|
+
|
10
|
+
def message_number
|
11
|
+
82_320
|
12
|
+
end
|
13
|
+
|
14
|
+
def message_hash
|
15
|
+
{
|
16
|
+
xml: xml_hash
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def input_hash
|
23
|
+
{
|
24
|
+
:@endofprocessoption => 1,
|
25
|
+
:@altnameidonfile => 'N',
|
26
|
+
:@usecurdate4outofrange => 'N',
|
27
|
+
:@reportoption => 1,
|
28
|
+
:@usefile => false
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def xml_hash
|
33
|
+
xml_base_hash.merge(
|
34
|
+
details: { detail: @model.records.map(&:to_xml_hash) }
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class MessageBase
|
6
|
+
def message_number
|
7
|
+
fail 'You must override the message number'
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_xml
|
11
|
+
Gyoku.xml(message_hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def input_base_hash
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
def input_hash
|
21
|
+
fail 'You must override the input_hash'
|
22
|
+
end
|
23
|
+
|
24
|
+
def message_hash
|
25
|
+
{
|
26
|
+
xml: xml_hash
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def xml_base_hash
|
31
|
+
{
|
32
|
+
input: input_hash
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def xml_hash
|
37
|
+
fail 'You must override the input_hash'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryBase < MessageBase
|
6
|
+
protected
|
7
|
+
|
8
|
+
def input_base_hash
|
9
|
+
{
|
10
|
+
:@requester => Agris::USER_AGENT,
|
11
|
+
:@usefile => false
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def input_hash
|
16
|
+
fail 'You must override the input_hash'
|
17
|
+
end
|
18
|
+
|
19
|
+
def message_hash
|
20
|
+
{
|
21
|
+
xml: xml_hash
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def xml_base_hash
|
26
|
+
{
|
27
|
+
input: input_hash
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def xml_hash
|
32
|
+
fail 'You must override the input_hash'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryChangedDeliveryTickets < QueryBase
|
6
|
+
def initialize(time)
|
7
|
+
@time = time
|
8
|
+
end
|
9
|
+
|
10
|
+
def message_number
|
11
|
+
80_600
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def input_hash
|
17
|
+
input_base_hash
|
18
|
+
.merge(
|
19
|
+
locid: {
|
20
|
+
:@datetime => @time.strftime('%Y-%m-%dT%H:%M:%S'),
|
21
|
+
:@id => nil,
|
22
|
+
:@loccode => nil
|
23
|
+
}
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def xml_hash
|
28
|
+
xml_base_hash
|
29
|
+
.merge(
|
30
|
+
lineitemdetail: true,
|
31
|
+
componentdetail: true,
|
32
|
+
remarkdetail: true,
|
33
|
+
lineremarkdetail: true,
|
34
|
+
trancodedetail: true,
|
35
|
+
specificationdetail: true
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryChangedInvoices < QueryBase
|
6
|
+
def initialize(time, detail)
|
7
|
+
@time = time
|
8
|
+
@detail = detail
|
9
|
+
end
|
10
|
+
|
11
|
+
def message_number
|
12
|
+
80_500
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def input_hash
|
18
|
+
input_base_hash
|
19
|
+
.merge(
|
20
|
+
:@details => @detail,
|
21
|
+
locid: {
|
22
|
+
:@datetime => @time.strftime('%Y-%m-%dT%H:%M:%S'),
|
23
|
+
:@id => nil,
|
24
|
+
:@loccode => nil
|
25
|
+
}
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def xml_hash
|
30
|
+
xml_base_hash
|
31
|
+
.merge(
|
32
|
+
componentdetail: true,
|
33
|
+
discountdetail: true,
|
34
|
+
gldistributiondetail: true,
|
35
|
+
lineitemdetail: true,
|
36
|
+
lineremarkdetail: true,
|
37
|
+
remarkdetail: true,
|
38
|
+
specificationdetail: true,
|
39
|
+
splitdetail: true,
|
40
|
+
taxdetail: true,
|
41
|
+
taxratedetail: true,
|
42
|
+
trancodedetail: true
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryChangedOrders < QueryBase
|
6
|
+
def initialize(time)
|
7
|
+
@time = time
|
8
|
+
end
|
9
|
+
|
10
|
+
def message_number
|
11
|
+
80_900
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def input_hash
|
17
|
+
input_base_hash
|
18
|
+
.merge(
|
19
|
+
locid: {
|
20
|
+
:@datetime => @time.strftime('%Y-%m-%dT%H:%M:%S'),
|
21
|
+
:@id => nil,
|
22
|
+
:@loccode => nil
|
23
|
+
}
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def xml_hash
|
28
|
+
xml_base_hash
|
29
|
+
.merge(
|
30
|
+
lineitemdetail: true,
|
31
|
+
componentdetail: true,
|
32
|
+
remarkdetail: true,
|
33
|
+
lineremarkdetail: true,
|
34
|
+
trancodedetail: true,
|
35
|
+
specificationdetail: true
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryDeliveryTicketDocuments < QueryBase
|
6
|
+
def initialize(document_references)
|
7
|
+
@document_references = document_references
|
8
|
+
end
|
9
|
+
|
10
|
+
def message_number
|
11
|
+
80_600
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def input_hash
|
17
|
+
input_base_hash
|
18
|
+
end
|
19
|
+
|
20
|
+
def xml_hash
|
21
|
+
xml_base_hash
|
22
|
+
.merge(
|
23
|
+
deliveryticket: @document_references.map(&:to_xml_hash),
|
24
|
+
lineitemdetail: true,
|
25
|
+
componentdetail: true,
|
26
|
+
remarkdetail: true,
|
27
|
+
lineremarkdetail: true,
|
28
|
+
trancodedetail: true,
|
29
|
+
specificationdetail: true
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Agris
|
3
|
+
module Api
|
4
|
+
module Messages
|
5
|
+
class QueryInvoiceDocuments < QueryBase
|
6
|
+
def initialize(document_references)
|
7
|
+
@document_references = document_references
|
8
|
+
end
|
9
|
+
|
10
|
+
def message_number
|
11
|
+
80_500
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def input_hash
|
17
|
+
input_base_hash
|
18
|
+
end
|
19
|
+
|
20
|
+
def xml_hash
|
21
|
+
xml_base_hash
|
22
|
+
.merge(
|
23
|
+
invoice: @document_references.map(&:to_xml_hash),
|
24
|
+
componentdetail: true,
|
25
|
+
discountdetail: true,
|
26
|
+
gldistributiondetail: true,
|
27
|
+
lineitemdetail: true,
|
28
|
+
lineremarkdetail: true,
|
29
|
+
remarkdetail: true,
|
30
|
+
specificationdetail: true,
|
31
|
+
splitdetail: true,
|
32
|
+
taxdetail: true,
|
33
|
+
taxratedetail: true,
|
34
|
+
trancodedetail: true
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|