agris 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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