Commit d9a9cb5d7c94bd0e9446633c1cd1a98b02804098
Committed by
GitHub
1 parent
23108441
Add portoi and comsfm bus obj (#11)
* WIP * Added ComsFn for custom form data and finished off PorToi to send new Purchase Orders * Finished Add Purchase Order with header and lines Fixes #752 in LMT 2.0
Showing
21 changed files
with
702 additions
and
0 deletions
Show diff stats
lib/syspro.rb
@@ -24,23 +24,38 @@ require 'syspro/version' | @@ -24,23 +24,38 @@ require 'syspro/version' | ||
24 | require 'syspro/api_operations/request' | 24 | require 'syspro/api_operations/request' |
25 | require 'syspro/api_operations/query' | 25 | require 'syspro/api_operations/query' |
26 | require 'syspro/api_operations/transaction' | 26 | require 'syspro/api_operations/transaction' |
27 | +require 'syspro/api_operations/setup' | ||
27 | 28 | ||
28 | require 'syspro/business_objects/combrw' | 29 | require 'syspro/business_objects/combrw' |
29 | require 'syspro/business_objects/comfch' | 30 | require 'syspro/business_objects/comfch' |
30 | require 'syspro/business_objects/comfnd' | 31 | require 'syspro/business_objects/comfnd' |
31 | require 'syspro/business_objects/sorqry' | 32 | require 'syspro/business_objects/sorqry' |
32 | require 'syspro/business_objects/portor' | 33 | require 'syspro/business_objects/portor' |
34 | +require 'syspro/business_objects/portoi' | ||
33 | require 'syspro/business_objects/porqry' | 35 | require 'syspro/business_objects/porqry' |
36 | +require 'syspro/business_objects/comsfm' | ||
34 | 37 | ||
35 | require 'syspro/business_objects/models/sor' | 38 | require 'syspro/business_objects/models/sor' |
36 | require 'syspro/business_objects/models/sor_detail' | 39 | require 'syspro/business_objects/models/sor_detail' |
37 | require 'syspro/business_objects/models/por_detail' | 40 | require 'syspro/business_objects/models/por_detail' |
38 | 41 | ||
42 | +require 'syspro/business_objects/models/purchase_order' | ||
43 | +require 'syspro/business_objects/models/purchase_orders/header' | ||
44 | +require 'syspro/business_objects/models/purchase_orders/order_details' | ||
45 | +require 'syspro/business_objects/models/purchase_orders/stock_line' | ||
46 | +require 'syspro/business_objects/models/purchase_orders/freight_line' | ||
47 | +require 'syspro/business_objects/models/purchase_orders/misc_charge_line' | ||
48 | +require 'syspro/business_objects/models/purchase_orders/comment_line' | ||
49 | + | ||
50 | +require 'syspro/business_objects/models/comsfm_item' | ||
51 | + | ||
39 | require 'syspro/business_objects/parsers/combrw_parser' | 52 | require 'syspro/business_objects/parsers/combrw_parser' |
40 | require 'syspro/business_objects/parsers/comfch_parser' | 53 | require 'syspro/business_objects/parsers/comfch_parser' |
41 | require 'syspro/business_objects/parsers/comfnd_parser' | 54 | require 'syspro/business_objects/parsers/comfnd_parser' |
42 | require 'syspro/business_objects/parsers/sorqry_parser' | 55 | require 'syspro/business_objects/parsers/sorqry_parser' |
43 | require 'syspro/business_objects/parsers/portor_parser' | 56 | require 'syspro/business_objects/parsers/portor_parser' |
57 | +require 'syspro/business_objects/parsers/portoi_parser' | ||
58 | +require 'syspro/business_objects/parsers/comsfm_parser' | ||
44 | 59 | ||
45 | # Main Module | 60 | # Main Module |
46 | module Syspro | 61 | module Syspro |
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +module Syspro | ||
4 | + module ApiOperations | ||
5 | + module Setup | ||
6 | + module ClassMethods | ||
7 | + def add(params) | ||
8 | + request(:get, '/Setup/Add', params) | ||
9 | + end | ||
10 | + | ||
11 | + def update(params) | ||
12 | + request(:get, '/Setup/Update', params) | ||
13 | + end | ||
14 | + | ||
15 | + def delete(params) | ||
16 | + request(:get, '/Setup/Delete', params) | ||
17 | + end | ||
18 | + | ||
19 | + private | ||
20 | + | ||
21 | + def warn_on_opts_in_params(params) | ||
22 | + Util::OPTS_USER_SPECIFIED.each do |opt| | ||
23 | + if params.key?(opt) | ||
24 | + warn("WARNING: #{opt} should be in opts instead of params.") | ||
25 | + end | ||
26 | + end | ||
27 | + end | ||
28 | + end # ClassMethods | ||
29 | + | ||
30 | + def self.included(base) | ||
31 | + base.extend(ClassMethods) | ||
32 | + end | ||
33 | + | ||
34 | + protected | ||
35 | + | ||
36 | + def request(method, url, params = {}, opts ={}) | ||
37 | + opts = @opts.merge(Util.normalize_opts(opts)) | ||
38 | + Request.request(method, url, params, opts) | ||
39 | + end | ||
40 | + end | ||
41 | + end | ||
42 | +end | ||
43 | + |
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +require 'syspro/business_objects/parsers/comsfm_parser' | ||
4 | +require 'erb' | ||
5 | + | ||
6 | +module Syspro | ||
7 | + module BusinessObjects | ||
8 | + class ComsFm < ApiResource | ||
9 | + include Syspro::ApiOperations::Setup | ||
10 | + include Syspro::BusinessObjects::Parsers | ||
11 | + | ||
12 | + attr_accessor :validate_only, | ||
13 | + :items | ||
14 | + | ||
15 | + def call(user_id) | ||
16 | + xml_parameters = params_template.result(binding) | ||
17 | + xml_in = template.result(binding) | ||
18 | + business_object = 'COMSFM' | ||
19 | + params = { 'UserId' => user_id, | ||
20 | + 'BusinessObject' => business_object, | ||
21 | + 'XmlParameters' => xml_parameters, | ||
22 | + 'XmlIn' => xml_in } | ||
23 | + resp = ComsFm.add(params) | ||
24 | + | ||
25 | + parse_response(resp) | ||
26 | + end | ||
27 | + | ||
28 | + def template | ||
29 | + ERB.new File.read(File.expand_path('schemas/comsfm_doc.xml.erb', File.dirname(__FILE__))), nil, '%' | ||
30 | + end | ||
31 | + | ||
32 | + def params_template | ||
33 | + ERB.new File.read(File.expand_path('schemas/comsfm.xml.erb', File.dirname(__FILE__))), nil, '%' | ||
34 | + end | ||
35 | + | ||
36 | + def parse_response(resp) | ||
37 | + handle_errors(resp) | ||
38 | + parser = ComsFmParser.new(resp[0].data) | ||
39 | + parser.parse | ||
40 | + end | ||
41 | + end | ||
42 | + end | ||
43 | +end | ||
0 | \ No newline at end of file | 44 | \ No newline at end of file |
lib/syspro/business_objects/models/purchase_order.rb
0 → 100644
lib/syspro/business_objects/models/purchase_orders/comment_line.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class CommentLine | ||
6 | + attr_accessor :purchase_order_line, | ||
7 | + :line_action_type, | ||
8 | + :comment, | ||
9 | + :attached_to_stk_line_number, | ||
10 | + :delete_attached_comment_lines, | ||
11 | + :change_single_comment_line | ||
12 | + end | ||
13 | + end | ||
14 | + end | ||
15 | + end | ||
16 | +end | ||
0 | \ No newline at end of file | 17 | \ No newline at end of file |
lib/syspro/business_objects/models/purchase_orders/freight_line.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class FreightLine | ||
6 | + attr_accessor :purchase_order_line, | ||
7 | + :line_action_type, | ||
8 | + :freight_value, | ||
9 | + :freight_tax_code, | ||
10 | + :freight_taxable | ||
11 | + :freight_f_loc | ||
12 | + end | ||
13 | + end | ||
14 | + end | ||
15 | + end | ||
16 | +end | ||
0 | \ No newline at end of file | 17 | \ No newline at end of file |
lib/syspro/business_objects/models/purchase_orders/header.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class Header | ||
6 | + attr_accessor :order_action_type, | ||
7 | + :supplier, | ||
8 | + :exch_rate_fixed, | ||
9 | + :exchange_rate, | ||
10 | + :order_type, | ||
11 | + :customer, | ||
12 | + :tax_status, | ||
13 | + :payment_terms, | ||
14 | + :invoice_terms, | ||
15 | + :customer_po_number, | ||
16 | + :shipping_instrs, | ||
17 | + :order_date, | ||
18 | + :due_date, | ||
19 | + :memo_date, | ||
20 | + :apply_due_date_to_lines, | ||
21 | + :memo_code, | ||
22 | + :buyer, | ||
23 | + :delivery_name, | ||
24 | + :delivery_addr1, | ||
25 | + :delivery_addr2, | ||
26 | + :delivery_addr3, | ||
27 | + :delivery_addr4, | ||
28 | + :delivery_addr5, | ||
29 | + :postal_code, | ||
30 | + :warehouse, | ||
31 | + :discount_less_plus, | ||
32 | + :disc_percent1, | ||
33 | + :disc_percent2, | ||
34 | + :disc_percent3, | ||
35 | + :purchase_order, | ||
36 | + :chg_po_stat_to_ready_to_print | ||
37 | + end | ||
38 | + end | ||
39 | + end | ||
40 | + end | ||
41 | +end | ||
42 | + | ||
43 | + | ||
44 | + |
lib/syspro/business_objects/models/purchase_orders/misc_charge_line.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class MiscChargeLine | ||
6 | + attr_accessor :purchase_order_line, | ||
7 | + :line_action_type, | ||
8 | + :misc_charge_value, | ||
9 | + :misc_charge_tax, | ||
10 | + :misc_taxable, | ||
11 | + :misc_charge_f_loc, | ||
12 | + :misc_description, | ||
13 | + :misc_comment_code | ||
14 | + end | ||
15 | + end | ||
16 | + end | ||
17 | + end | ||
18 | +end | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |
lib/syspro/business_objects/models/purchase_orders/order_details.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class OrderDetails | ||
6 | + attr_accessor :stock_lines, | ||
7 | + :comment_lines, | ||
8 | + :misc_charge_lines, | ||
9 | + :freight_lines | ||
10 | + | ||
11 | + def has_data | ||
12 | + has_stock || has_comment || has_misc_charge || has_freight | ||
13 | + end | ||
14 | + | ||
15 | + def has_stock | ||
16 | + (stock_lines && stock_lines.length) | ||
17 | + end | ||
18 | + | ||
19 | + def has_comment | ||
20 | + (comment_lines && comment_lines.length) | ||
21 | + end | ||
22 | + | ||
23 | + def has_misc_charge | ||
24 | + (misc_charge_lines && misc_charge_lines.length) | ||
25 | + end | ||
26 | + | ||
27 | + def has_freight | ||
28 | + (freight_lines && freight_lines.length) | ||
29 | + end | ||
30 | + end | ||
31 | + end | ||
32 | + end | ||
33 | + end | ||
34 | +end | ||
0 | \ No newline at end of file | 35 | \ No newline at end of file |
lib/syspro/business_objects/models/purchase_orders/stock_line.rb
0 → 100644
1 | +module Syspro | ||
2 | + module BusinessObjects | ||
3 | + module Models | ||
4 | + module PurchaseOrders | ||
5 | + class StockLine | ||
6 | + attr_accessor :purchase_order_line, | ||
7 | + :line_action_type, | ||
8 | + :stock_code, | ||
9 | + :stock_description, | ||
10 | + :warehouse, | ||
11 | + :sup_catalogue, | ||
12 | + :order_qty, | ||
13 | + :order_uom, | ||
14 | + :units, | ||
15 | + :pieces, | ||
16 | + :price_method, | ||
17 | + :supplier_contract, | ||
18 | + :price, | ||
19 | + :price_uom, | ||
20 | + :line_disc_type, | ||
21 | + :line_disc_less_plus, | ||
22 | + :line_disc_percent1, | ||
23 | + :line_disc_percent2, | ||
24 | + :line_disc_percent3, | ||
25 | + :line_disc_value, | ||
26 | + :taxable, | ||
27 | + :tax_codev, | ||
28 | + :job, | ||
29 | + :version, | ||
30 | + :release, | ||
31 | + :latest_due_date, | ||
32 | + :original_due_date, | ||
33 | + :reschedule_due_date, | ||
34 | + :ledger_code, | ||
35 | + :password_for_ledger_code, | ||
36 | + :subcontract_op, | ||
37 | + :inspection_reqd, | ||
38 | + :product_class, | ||
39 | + :nons_unit_mass, | ||
40 | + :nons_unit_vol | ||
41 | + end | ||
42 | + end | ||
43 | + end | ||
44 | + end | ||
45 | +end | ||
46 | + | ||
47 | + | ||
48 | + |
lib/syspro/business_objects/parsers/comsfm_parser.rb
0 → 100644
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +module Syspro | ||
4 | + module BusinessObjects | ||
5 | + module Parsers | ||
6 | + class ComsFmParser | ||
7 | + attr_reader :doc | ||
8 | + | ||
9 | + def initialize(doc) | ||
10 | + @doc = doc | ||
11 | + end | ||
12 | + | ||
13 | + def parse | ||
14 | + error_numbers = doc.xpath("//ErrorNumber").map{|e| e.text} | ||
15 | + end | ||
16 | + end | ||
17 | + end | ||
18 | + end | ||
19 | +end | ||
20 | + |
lib/syspro/business_objects/parsers/portoi_parser.rb
0 → 100644
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +module Syspro | ||
4 | + module BusinessObjects | ||
5 | + module Parsers | ||
6 | + class PorToiParser | ||
7 | + attr_reader :doc | ||
8 | + | ||
9 | + def initialize(doc) | ||
10 | + @doc = doc | ||
11 | + end | ||
12 | + | ||
13 | + def parse | ||
14 | + po = Syspro::BusinessObjects::Models::PurchaseOrder.new() | ||
15 | + | ||
16 | + po.error_numbers = doc.xpath("//ErrorNumber").map{|e| e.text} | ||
17 | + | ||
18 | + po.purchase_order = doc.first_element_child.xpath('Order/Key/PurchaseOrder').text | ||
19 | + po.item_number = doc.first_element_child.xpath('Order/ItemNumber').text | ||
20 | + po.order_action_type = doc.first_element_child.xpath('Order/OrderActionType').text | ||
21 | + po.supplier = doc.first_element_child.xpath('Order/Supplier').text | ||
22 | + | ||
23 | + po | ||
24 | + end | ||
25 | + | ||
26 | + PorToiObject = Struct.new(:key, :receipts) | ||
27 | + end | ||
28 | + end | ||
29 | + end | ||
30 | +end | ||
31 | + |
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +require 'syspro/business_objects/parsers/portoi_parser' | ||
4 | +require 'erb' | ||
5 | + | ||
6 | +module Syspro | ||
7 | + module BusinessObjects | ||
8 | + class PorToi < ApiResource | ||
9 | + include Syspro::ApiOperations::Transaction | ||
10 | + include Syspro::BusinessObjects::Parsers | ||
11 | + | ||
12 | + # input params | ||
13 | + attr_accessor :purchase_order_header, | ||
14 | + :order_details, | ||
15 | + :validate_only, | ||
16 | + :ignore_warnings, | ||
17 | + :allow_non_stock_items, | ||
18 | + :allow_zero_price, | ||
19 | + :validate_working_days, | ||
20 | + :allow_po_when_blanket_po, | ||
21 | + :default_memo_code, | ||
22 | + :fixed_exchange_rate, | ||
23 | + :default_memo_days, | ||
24 | + :allow_blank_ledger_code, | ||
25 | + :calc_due_date, | ||
26 | + :default_delivery_address, | ||
27 | + :insert_dangerous_goods_text, | ||
28 | + :insert_additional_po_text, | ||
29 | + :status | ||
30 | + | ||
31 | + def call(user_id) | ||
32 | + xml_parameters = params_template.result(binding) | ||
33 | + xml_in = template.result(binding) | ||
34 | + business_object = 'PORTOI' | ||
35 | + params = { 'UserId' => user_id, | ||
36 | + 'BusinessObject' => business_object, | ||
37 | + 'XmlParameters' => xml_parameters, | ||
38 | + 'XmlIn' => xml_in } | ||
39 | + resp = PorToi.post(params) | ||
40 | + | ||
41 | + parse_response(resp) | ||
42 | + end | ||
43 | + | ||
44 | + def template | ||
45 | + ERB.new File.read(File.expand_path('schemas/portoi_doc.xml.erb', File.dirname(__FILE__))), nil, '%' | ||
46 | + end | ||
47 | + | ||
48 | + def params_template | ||
49 | + ERB.new File.read(File.expand_path('schemas/portoi.xml.erb', File.dirname(__FILE__))), nil, '%' | ||
50 | + end | ||
51 | + | ||
52 | + def parse_response(resp) | ||
53 | + handle_errors(resp) | ||
54 | + parser = PorToiParser.new(resp[0].data) | ||
55 | + parser.parse | ||
56 | + end | ||
57 | + | ||
58 | + def render_xml(inner_text) | ||
59 | + inner_text ? inner_text.to_s : '' | ||
60 | + end | ||
61 | + end | ||
62 | + end | ||
63 | +end | ||
64 | + |
1 | +<SetupCustomForm xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="COMSFM.XSD"> | ||
2 | + <Parameters> | ||
3 | + <ValidateOnly><%= @validate_only ? "Y" : "N" %></ValidateOnly> | ||
4 | + </Parameters> | ||
5 | +</SetupCustomForm> | ||
0 | \ No newline at end of file | 6 | \ No newline at end of file |
lib/syspro/business_objects/schemas/comsfm_doc.xml.erb
0 → 100644
1 | +<SetupCustomForm xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="COMSFMDOC.XSD"> | ||
2 | +<% @items.each do |item| %> | ||
3 | + <Item> | ||
4 | + <Key> | ||
5 | + <FormType><%= item.form_type %></FormType> | ||
6 | + <KeyField><%= item.key_field %></KeyField> | ||
7 | + <FieldName><%= item.field_name %></FieldName> | ||
8 | + </Key> | ||
9 | + <AlphaValue><%= item.alpha_value ? "Y" : "N" %></AlphaValue> | ||
10 | + </Item> | ||
11 | +<% end %> | ||
12 | +</SetupCustomForm> | ||
0 | \ No newline at end of file | 13 | \ No newline at end of file |
1 | +<?xml version="1.0" encoding="Windows-1252"?> | ||
2 | +<PostPurchaseOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="PORTOI.XSD"> | ||
3 | + <Parameters> | ||
4 | + <ValidateOnly><%= @validate_only ? @validate_only : "N" %></ValidateOnly> | ||
5 | + <IgnoreWarnings><%= @ignore_warnings ? @ignore_warnings : "N" %></IgnoreWarnings> | ||
6 | + <AllowNonStockItems><%= @allow_non_stock_items ? @allow_non_stock_items : "N" %></AllowNonStockItems> | ||
7 | + <AllowZeroPrice><%= @allow_zero_price ? @allow_zero_price : "N" %></AllowZeroPrice> | ||
8 | + <ValidateWorkingDays><%= @validate_working_days ? @validate_working_days : "N" %></ValidateWorkingDays> | ||
9 | + <AllowPoWhenBlanketPo><%= @allow_po_when_blanket_po ? @allow_po_when_blanket_po : "N" %></AllowPoWhenBlanketPo> | ||
10 | + <DefaultMemoCode><%= @default_memo_code ? default_memo_code.to_s : "" %></DefaultMemoCode> | ||
11 | + <FixedExchangeRate><%= @fixed_exchange_rate ? @fixed_exchange_rate : "N" %></FixedExchangeRate> | ||
12 | + <DefaultMemoDays><%= @default_memo_days ? @default_memo_days.to_s : "0" %></DefaultMemoDays> | ||
13 | + <AllowBlankLedgerCode><%= @allow_blank_ledger_code ? @allow_blank_ledger_code : "N" %></AllowBlankLedgerCode> | ||
14 | + <DefaultDeliveryAddress/> | ||
15 | + <CalcDueDate><%= @calc_due_date ? @calc_due_date : "N" %></CalcDueDate> | ||
16 | + <InsertDangerousGoodsText><%= @insert_dangerous_goods_text ? @insert_dangerous_goods_text : "N" %></InsertDangerousGoodsText> | ||
17 | + <InsertAdditionalPOText><%= @insert_additional_po_text ? @insert_additional_po_text : "N" %></InsertAdditionalPOText> | ||
18 | + <Status><%= @status ? status.to_s : "1" %></Status> | ||
19 | + </Parameters> | ||
20 | +</PostPurchaseOrders> | ||
0 | \ No newline at end of file | 21 | \ No newline at end of file |
lib/syspro/business_objects/schemas/portoi_doc.xml.erb
0 → 100644
1 | +<?xml version="1.0" encoding="Windows-1252"?> | ||
2 | +<PostPurchaseOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="PORTOIDOC.XSD"> | ||
3 | + <Orders> | ||
4 | + <OrderHeader> | ||
5 | + <OrderActionType><%= render_xml(@purchase_order_header.order_action_type) %></OrderActionType> | ||
6 | + <Supplier><%= render_xml(@purchase_order_header.supplier) %></Supplier> | ||
7 | + <ExchRateFixed><%= render_xml(@purchase_order_header.exch_rate_fixed) %></ExchRateFixed> | ||
8 | + <ExchangeRate><%= render_xml(@purchase_order_header.exchange_rate) %></ExchangeRate> | ||
9 | + <OrderType><%= render_xml(@purchase_order_header.order_type) %></OrderType> | ||
10 | + <Customer><%= render_xml(@purchase_order_header.customer) %></Customer> | ||
11 | + <TaxStatus><%= render_xml(@purchase_order_header.tax_status) %></TaxStatus> | ||
12 | + <PaymentTerms><%= render_xml(@purchase_order_header.payment_terms) %></PaymentTerms> | ||
13 | + <InvoiceTerms><%= render_xml(@purchase_order_header.invoice_terms) %></InvoiceTerms> | ||
14 | + <CustomerPoNumber><%= render_xml(@purchase_order_header.customer_po_number) %></CustomerPoNumber> | ||
15 | + <ShippingInstrs><%= render_xml(@purchase_order_header.shipping_instrs) %></ShippingInstrs> | ||
16 | + <OrderDate><%= render_xml(@purchase_order_header.order_date) %></OrderDate> | ||
17 | + <DueDate><%= render_xml(@purchase_order_header.due_date) %></DueDate> | ||
18 | + <MemoDate><%= render_xml(@purchase_order_header.memo_date) %></MemoDate> | ||
19 | + <ApplyDueDateToLines><%= render_xml(@purchase_order_header.apply_due_date_to_lines) %></ApplyDueDateToLines> | ||
20 | + <MemoCode><%= render_xml(@purchase_order_header.memo_code) %></MemoCode> | ||
21 | + <Buyer><%= render_xml(@purchase_order_header.buyer) %></Buyer> | ||
22 | + <DeliveryName><%= render_xml(@purchase_order_header.delivery_name) %></DeliveryName> | ||
23 | + <DeliveryAddr1><%= render_xml(@purchase_order_header.delivery_addr1) %></DeliveryAddr1> | ||
24 | + <DeliveryAddr2><%= render_xml(@purchase_order_header.delivery_addr2) %></DeliveryAddr2> | ||
25 | + <DeliveryAddr3><%= render_xml(@purchase_order_header.delivery_addr3) %></DeliveryAddr3> | ||
26 | + <DeliveryAddr4><%= render_xml(@purchase_order_header.delivery_addr4) %></DeliveryAddr4> | ||
27 | + <DeliveryAddr5><%= render_xml(@purchase_order_header.delivery_addr5) %></DeliveryAddr5> | ||
28 | + <PostalCode><%= render_xml(@purchase_order_header.postal_code) %></PostalCode> | ||
29 | + <Warehouse><%= render_xml(@purchase_order_header.warehouse) %></Warehouse> | ||
30 | + <DiscountLessPlus><%= render_xml(@purchase_order_header.discount_less_plus) %></DiscountLessPlus> | ||
31 | + <DiscPercent1><%= render_xml(@purchase_order_header.disc_percent1) %></DiscPercent1> | ||
32 | + <DiscPercent2><%= render_xml(@purchase_order_header.disc_percent2) %></DiscPercent2> | ||
33 | + <DiscPercent3><%= render_xml(@purchase_order_header.disc_percent3) %></DiscPercent3> | ||
34 | + <PurchaseOrder><%= render_xml(@purchase_order_header.purchase_order) %></PurchaseOrder> | ||
35 | + <ChgPOStatToReadyToPrint><%= render_xml(@purchase_order_header.chg_po_stat_to_ready_to_print) %></ChgPOStatToReadyToPrint> | ||
36 | + </OrderHeader> | ||
37 | + <% | ||
38 | + if @order_details && @order_details.has_data | ||
39 | + %> | ||
40 | + <OrderDetails> | ||
41 | + <% | ||
42 | + if @order_details.has_stock | ||
43 | + @order_details.stock_lines.each do |stock_line| | ||
44 | + %> | ||
45 | + <StockLine> | ||
46 | + <PurchaseOrderLine><%= render_xml(stock_line.purchase_order_line) %></PurchaseOrderLine> | ||
47 | + <LineActionType><%= render_xml(stock_line.line_action_type)%></LineActionType> | ||
48 | + <StockCode><%= render_xml(stock_line.stock_code)%></StockCode> | ||
49 | + <StockDescription><%= render_xml(stock_line.stock_description)%></StockDescription> | ||
50 | + <Warehouse><%= render_xml(stock_line.warehouse)%></Warehouse> | ||
51 | + <SupCatalogue><%= render_xml(stock_line.sup_catalogue)%></SupCatalogue> | ||
52 | + <OrderQty><%= render_xml(stock_line.order_qty)%></OrderQty> | ||
53 | + <OrderUom><%= render_xml(stock_line.order_uom)%></OrderUom> | ||
54 | + <Units><%= render_xml(stock_line.units)%></Units> | ||
55 | + <Pieces><%= render_xml(stock_line.pieces)%></Pieces> | ||
56 | + <PriceMethod><%= render_xml(stock_line.price_method)%></PriceMethod> | ||
57 | + <SupplierContract><%= render_xml(stock_line.supplier_contract)%></SupplierContract> | ||
58 | + <Price><%= render_xml(stock_line.price)%></Price> | ||
59 | + <PriceUom><%= render_xml(stock_line.price_uom)%></PriceUom> | ||
60 | + <LineDiscType><%= render_xml(stock_line.line_disc_type)%></LineDiscType> | ||
61 | + <LineDiscLessPlus><%= render_xml(stock_line.line_disc_less_plus)%></LineDiscLessPlus> | ||
62 | + <LineDiscPercent1><%= render_xml(stock_line.line_disc_percent1)%></LineDiscPercent1> | ||
63 | + <LineDiscPercent2><%= render_xml(stock_line.line_disc_percent2)%></LineDiscPercent2> | ||
64 | + <LineDiscPercent3><%= render_xml(stock_line.line_disc_percent3)%></LineDiscPercent3> | ||
65 | + <LineDiscValue><%= render_xml(stock_line.line_disc_value)%></LineDiscValue> | ||
66 | + <Taxable><%= render_xml(stock_line.taxable)%></Taxable> | ||
67 | + <TaxCode><%= render_xml(stock_line.tax_codev)%></TaxCode> | ||
68 | + <Job><%= render_xml(stock_line.job)%></Job> | ||
69 | + <Version><%= render_xml(stock_line.version)%></Version> | ||
70 | + <Release><%= render_xml(stock_line.release)%></Release> | ||
71 | + <LatestDueDate><%= render_xml(stock_line.latest_due_date)%></LatestDueDate> | ||
72 | + <OriginalDueDate><%= render_xml(stock_line.original_due_date)%></OriginalDueDate> | ||
73 | + <RescheduleDueDate><%= render_xml(stock_line.reschedule_due_date)%></RescheduleDueDate> | ||
74 | + <LedgerCode><%= render_xml(stock_line.ledger_code)%></LedgerCode> | ||
75 | + <PasswordForLedgerCode><%= render_xml(stock_line.password_for_ledger_code)%></PasswordForLedgerCode> | ||
76 | + <SubcontractOp><%= render_xml(stock_line.subcontract_op)%></SubcontractOp> | ||
77 | + <InspectionReqd><%= render_xml(stock_line.inspection_reqd)%></InspectionReqd> | ||
78 | + <ProductClass><%= render_xml(stock_line.product_class)%></ProductClass> | ||
79 | + <NonsUnitMass><%= render_xml(stock_line.nons_unit_mass)%></NonsUnitMass> | ||
80 | + <NonsUnitVol><%= render_xml(stock_line.nons_unit_vol)%></NonsUnitVol> | ||
81 | + </StockLine> | ||
82 | + <% | ||
83 | + end | ||
84 | + end | ||
85 | + | ||
86 | + if @order_details.has_comment | ||
87 | + @order_details.comment_lines.each do |comment_line| | ||
88 | + %> | ||
89 | + <CommentLine> | ||
90 | + <PurchaseOrderLine><%= render_xml(comment_line.purchase_order_line)%></PurchaseOrderLine> | ||
91 | + <LineActionType><%= render_xml(comment_line.line_action_type)%></LineActionType> | ||
92 | + <Comment><%= render_xml(comment_line.comment)%></Comment> | ||
93 | + <AttachedToStkLineNumber><%= render_xml(comment_line.attached_to_stk_line_number)%></AttachedToStkLineNumber> | ||
94 | + <DeleteAttachedCommentLines><%= render_xml(comment_line.delete_attached_comment_lines)%></DeleteAttachedCommentLines> | ||
95 | + <ChangeSingleCommentLine><%= render_xml(comment_line.change_single_comment_line)%></ChangeSingleCommentLine> | ||
96 | + </CommentLine> | ||
97 | + <% | ||
98 | + end | ||
99 | + end | ||
100 | + | ||
101 | + if @order_details.has_misc_charge | ||
102 | + @order_details.misc_charge_lines.each do |misc_charge_line| | ||
103 | + %> | ||
104 | + <MiscChargeLine> | ||
105 | + <PurchaseOrderLine><%= render_xml(misc_charge_line.purchase_order_line)%></PurchaseOrderLine> | ||
106 | + <LineActionType><%= render_xml(misc_charge_line.line_action_type)%></LineActionType> | ||
107 | + <MiscChargeValue><%= render_xml(misc_charge_line.misc_charge_value)%></MiscChargeValue> | ||
108 | + <MiscChargeTax><%= render_xml(misc_charge_line.misc_charge_tax)%></MiscChargeTax> | ||
109 | + <MiscTaxable><%= render_xml(misc_charge_line.misc_taxable)%></MiscTaxable> | ||
110 | + <MiscChargeFLoc><%= render_xml(misc_charge_line.misc_charge_f_loc)%></MiscChargeFLoc> | ||
111 | + <MiscDescription><%= render_xml(misc_charge_line.misc_description)%></MiscDescription> | ||
112 | + <MiscCommentCode><%= render_xml(misc_charge_line.misc_comment_code)%></MiscCommentCode> | ||
113 | + </MiscChargeLine> | ||
114 | + <% | ||
115 | + end | ||
116 | + end | ||
117 | + | ||
118 | + if @order_details.has_freight | ||
119 | + @order_details.freight_lines.each do |freight_line| | ||
120 | + %> | ||
121 | + <FreightLine> | ||
122 | + <PurchaseOrderLine><%= render_xml(freight_line.purchase_order_line)%></PurchaseOrderLine> | ||
123 | + <LineActionType><%= render_xml(freight_line.line_action_type)%></LineActionType> | ||
124 | + <FreightValue><%= render_xml(freight_line.freight_value)%></FreightValue> | ||
125 | + <FreightTaxCode><%= render_xml(freight_line.freight_tax_code)%></FreightTaxCode> | ||
126 | + <FreightTaxable><%= render_xml(freight_line.freight_taxable)%></FreightTaxable> | ||
127 | + <FreightFLoc><%= render_xml(freight_line.freight_f_loc)%></FreightFLoc> | ||
128 | + </FreightLine> | ||
129 | + <% | ||
130 | + end | ||
131 | + end | ||
132 | + %> | ||
133 | + </OrderDetails> | ||
134 | + <% | ||
135 | + end | ||
136 | + %> | ||
137 | + </Orders> | ||
138 | +</PostPurchaseOrders> | ||
0 | \ No newline at end of file | 139 | \ No newline at end of file |
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +require 'test_helper' | ||
4 | + | ||
5 | +class ComsFmTest < Minitest::Test | ||
6 | + extend Minitest::Spec::DSL | ||
7 | + | ||
8 | + let(:username) { ENV['SYSPRO_USERNAME'] } | ||
9 | + let(:password) { ENV['SYSPRO_PASSWORD'] } | ||
10 | + let(:company) { ENV['SYSPRO_COMPANY'] } | ||
11 | + let(:company_password) { '' } | ||
12 | + let(:user_id) do | ||
13 | + Syspro::Logon.logon(username, password, company, company_password) | ||
14 | + end | ||
15 | + | ||
16 | + def test_comsfm | ||
17 | + cust_item = Syspro::BusinessObjects::Models::ComsFmItem.new | ||
18 | + cust_item.form_type = "POR" | ||
19 | + cust_item.key_field = "U03421" | ||
20 | + cust_item.field_name = "TempPO" | ||
21 | + cust_item.alpha_value = "Y" | ||
22 | + | ||
23 | + cust_form = Syspro::BusinessObjects::ComsFm.new | ||
24 | + cust_form.validate_only = "Y" | ||
25 | + cust_form.items = [cust_item] | ||
26 | + | ||
27 | + errors = cust_form.call(user_id.guid) | ||
28 | + | ||
29 | + assert_equal errors.length, 0 | ||
30 | + end | ||
31 | +end | ||
0 | \ No newline at end of file | 32 | \ No newline at end of file |
1 | +# frozen_string_literal: true | ||
2 | + | ||
3 | +require 'test_helper' | ||
4 | + | ||
5 | +class PorToiTest < Minitest::Test | ||
6 | + extend Minitest::Spec::DSL | ||
7 | + | ||
8 | + let(:username) { ENV['SYSPRO_USERNAME'] } | ||
9 | + let(:password) { ENV['SYSPRO_PASSWORD'] } | ||
10 | + let(:company) { ENV['SYSPRO_COMPANY'] } | ||
11 | + let(:company_password) { '' } | ||
12 | + let(:user_id) do | ||
13 | + Syspro::Logon.logon(username, password, company, company_password) | ||
14 | + end | ||
15 | + | ||
16 | + def test_portoi | ||
17 | + po = Syspro::BusinessObjects::PorToi.new | ||
18 | + po.purchase_order_header = Syspro::BusinessObjects::Models::PurchaseOrders::Header.new | ||
19 | + | ||
20 | + # Setup the PORTOI params | ||
21 | + po.validate_only = "N" | ||
22 | + po.ignore_warnings = "N" | ||
23 | + po.allow_non_stock_items = "N" | ||
24 | + po.allow_zero_price = "Y" | ||
25 | + po.validate_working_days = "N" | ||
26 | + po.allow_po_when_blanket_po = "N" | ||
27 | + po.default_memo_code = "" | ||
28 | + po.fixed_exchange_rate = "N" | ||
29 | + po.default_memo_days = 0 | ||
30 | + po.allow_blank_ledger_code = "Y" | ||
31 | + po.default_delivery_address = "" | ||
32 | + po.calc_due_date = "N" | ||
33 | + po.insert_dangerous_goods_text = "N" | ||
34 | + po.insert_additional_po_text = "N" | ||
35 | + po.status = "1" | ||
36 | + | ||
37 | + # Setup the purchase order header data attributes | ||
38 | + po.purchase_order_header.order_action_type = "A" | ||
39 | + po.purchase_order_header.order_type = "L" | ||
40 | + po.purchase_order_header.supplier = "WYC001" | ||
41 | + po.purchase_order_header.customer_po_number = "H01993-1" | ||
42 | + po.purchase_order_header.buyer = "PCD" | ||
43 | + po.purchase_order_header.warehouse = "P0" | ||
44 | + po.purchase_order_header.tax_status = "N" | ||
45 | + po.purchase_order_header.invoice_terms = "X" | ||
46 | + po.purchase_order_header.order_date = Time.now.strftime("%Y-%m-%d") | ||
47 | + po.purchase_order_header.apply_due_date_to_lines = "A" | ||
48 | + po.purchase_order_header.disc_percent1 = 0 | ||
49 | + po.purchase_order_header.disc_percent2 = 0 | ||
50 | + po.purchase_order_header.disc_percent3 = 0 | ||
51 | + | ||
52 | + line1 = Syspro::BusinessObjects::Models::PurchaseOrders::StockLine.new | ||
53 | + line1.purchase_order_line = 1 | ||
54 | + line1.line_action_type = "A" | ||
55 | + line1.stock_code = "8801" | ||
56 | + line1.warehouse = "P0" | ||
57 | + line1.order_qty = "100" | ||
58 | + line1.order_uom = "KG" | ||
59 | + line1.pieces = "0" | ||
60 | + line1.price_method = "M" | ||
61 | + line1.price = 0 | ||
62 | + line1.line_disc_type = "P" | ||
63 | + line1.line_disc_less_plus = "L" | ||
64 | + line1.line_disc_percent1 = 0 | ||
65 | + line1.line_disc_percent2 = 0 | ||
66 | + line1.line_disc_percent3 = 0 | ||
67 | + line1.line_disc_value = 0 | ||
68 | + line1.taxable = "N" | ||
69 | + | ||
70 | + po.order_details = Syspro::BusinessObjects::Models::PurchaseOrders::OrderDetails.new | ||
71 | + po.order_details.stock_lines = [line1] | ||
72 | + binding.pry | ||
73 | + | ||
74 | + syspro_po = po.call(user_id.guid) | ||
75 | + | ||
76 | + assert_equal syspro_po.error_numbers.length, 0 | ||
77 | + end | ||
78 | +end | ||
0 | \ No newline at end of file | 79 | \ No newline at end of file |
test/test_helper.rb
@@ -11,6 +11,7 @@ require 'webmock' | @@ -11,6 +11,7 @@ require 'webmock' | ||
11 | VCR.configure do |c| | 11 | VCR.configure do |c| |
12 | c.cassette_library_dir = 'test/cassettes' | 12 | c.cassette_library_dir = 'test/cassettes' |
13 | c.hook_into :webmock | 13 | c.hook_into :webmock |
14 | + c.allow_http_connections_when_no_cassette = true | ||
14 | c.filter_sensitive_data('<syspro_username>') { ENV['SYSPRO_USERNAME'] } | 15 | c.filter_sensitive_data('<syspro_username>') { ENV['SYSPRO_USERNAME'] } |
15 | c.filter_sensitive_data('<syspro_password>') { ENV['SYSPRO_PASSWORD'] } | 16 | c.filter_sensitive_data('<syspro_password>') { ENV['SYSPRO_PASSWORD'] } |
16 | c.filter_sensitive_data('<syspro_company>') { ENV['SYSPRO_COMPANY'] } | 17 | c.filter_sensitive_data('<syspro_company>') { ENV['SYSPRO_COMPANY'] } |