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
@@ -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
|