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.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +21 -0
  6. data/README.md +36 -0
  7. data/Rakefile +6 -0
  8. data/agris.gemspec +30 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/agris.rb +61 -0
  12. data/lib/agris/api.rb +21 -0
  13. data/lib/agris/api/accounts_payables.rb +30 -0
  14. data/lib/agris/api/accounts_receivables.rb +11 -0
  15. data/lib/agris/api/accounts_receivables/invoice.rb +166 -0
  16. data/lib/agris/api/accounts_receivables/invoices.rb +29 -0
  17. data/lib/agris/api/accounts_receivables/specific_invoice_extract.rb +17 -0
  18. data/lib/agris/api/document_query_response.rb +59 -0
  19. data/lib/agris/api/grain.rb +12 -0
  20. data/lib/agris/api/grain/new_ticket.rb +118 -0
  21. data/lib/agris/api/grain/new_ticket_application.rb +34 -0
  22. data/lib/agris/api/grain/new_ticket_remark.rb +23 -0
  23. data/lib/agris/api/grain/tickets.rb +17 -0
  24. data/lib/agris/api/inventory.rb +16 -0
  25. data/lib/agris/api/inventory/delivery_ticket.rb +84 -0
  26. data/lib/agris/api/inventory/delivery_ticket_line_item.rb +59 -0
  27. data/lib/agris/api/inventory/delivery_tickets.rb +30 -0
  28. data/lib/agris/api/inventory/orders.rb +51 -0
  29. data/lib/agris/api/inventory/specific_delivery_ticket_extract.rb +17 -0
  30. data/lib/agris/api/inventory/specific_order_extract.rb +18 -0
  31. data/lib/agris/api/messages.rb +25 -0
  32. data/lib/agris/api/messages/import.rb +40 -0
  33. data/lib/agris/api/messages/message_base.rb +42 -0
  34. data/lib/agris/api/messages/query_base.rb +37 -0
  35. data/lib/agris/api/messages/query_changed_delivery_tickets.rb +41 -0
  36. data/lib/agris/api/messages/query_changed_invoices.rb +48 -0
  37. data/lib/agris/api/messages/query_changed_orders.rb +41 -0
  38. data/lib/agris/api/messages/query_delivery_ticket_documents.rb +35 -0
  39. data/lib/agris/api/messages/query_invoice_documents.rb +40 -0
  40. data/lib/agris/api/messages/query_order_documents.rb +35 -0
  41. data/lib/agris/api/new_order.rb +86 -0
  42. data/lib/agris/api/new_order_remark.rb +22 -0
  43. data/lib/agris/api/new_voucher.rb +113 -0
  44. data/lib/agris/api/order.rb +63 -0
  45. data/lib/agris/api/order_line.rb +32 -0
  46. data/lib/agris/api/post_result.rb +24 -0
  47. data/lib/agris/api/remark.rb +16 -0
  48. data/lib/agris/api/support.rb +77 -0
  49. data/lib/agris/api/tran_code.rb +17 -0
  50. data/lib/agris/client.rb +39 -0
  51. data/lib/agris/context.rb +6 -0
  52. data/lib/agris/credentials.rb +7 -0
  53. data/lib/agris/credentials/anonymous.rb +11 -0
  54. data/lib/agris/credentials/basic_auth.rb +15 -0
  55. data/lib/agris/process_message_response.rb +58 -0
  56. data/lib/agris/resources/post_sales_order.xml +93 -0
  57. data/lib/agris/resources/post_sales_order_response.xml +21 -0
  58. data/lib/agris/savon_request.rb +73 -0
  59. data/lib/agris/user_agent.rb +7 -0
  60. data/lib/agris/version.rb +3 -0
  61. data/lib/agris/xml_model.rb +62 -0
  62. 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