Commit d9177f32280bce23ed500524f5d2203c7c8d3c74

Authored by Isaac Lewis
1 parent 291179ed

create sor model; create sorqbs bo files; create sor test

lib/syspro.rb
... ... @@ -25,10 +25,12 @@ require 'syspro/api_operations/query'
25 25 require 'syspro/business_objects/combrw'
26 26 require 'syspro/business_objects/comfch'
27 27 require 'syspro/business_objects/comfnd'
  28 +require 'syspro/business_objects/sorqbs'
28 29  
29 30 require 'syspro/business_objects/parsers/combrw_parser'
30 31 require 'syspro/business_objects/parsers/comfch_parser'
31 32 require 'syspro/business_objects/parsers/comfnd_parser'
  33 +require 'syspro/business_objects/parsers/sorqbs_parser'
32 34  
33 35 # Main Module
34 36 module Syspro
... ...
lib/syspro/api_operations/query.rb
... ... @@ -16,8 +16,6 @@ module Syspro
16 16 request(:get, '/Query/Query', params)
17 17 end
18 18  
19   - def find; end
20   -
21 19 private
22 20  
23 21 def warn_on_opts_in_params(params)
... ...
lib/syspro/business_objects/models/sor.rb 0 → 100644
  1 +module Syspro
  2 + module BusinessObjects
  3 + module Models
  4 + class Sor
  5 + attr_accessor :customer, :name, :customer_po_number, :cust_stock_code, :stock_code, :description,
  6 + :supply_wh, :release_manager, :release_status, :purchase_order, :shipment_days,
  7 + :num_day_drops, :num_week_drops, :day_in_week, :num_month_drops, :day_in_month,
  8 + :price_contract_num, :stock_uom, :contract_qty, :total_delivered, :total_received,
  9 + :opening_cume, :data_last_inv, :base_date, :expiry_date, :last_invoice, :buying_group,
  10 + :last_dispatch_note, :confirmed_release_details, :unconfirmed_release_details, :release_details,
  11 + :delivery_history_details, :release_history_details, :sor_detail, :contract_item
  12 + end
  13 + end
  14 + end
  15 +end
  16 +
... ...
lib/syspro/business_objects/parsers/sorqbs_parser.rb 0 → 100644
  1 +# frozen_string_literal: true
  2 +
  3 +module Syspro
  4 + module BusinessObjects
  5 + module Parsers
  6 + class SorQbs
  7 + attr_reader :doc
  8 +
  9 + def initialize(doc)
  10 + @doc = doc
  11 + end
  12 +
  13 + def parse
  14 + binding.pry
  15 + sor = Syspro::BusinessObjects::Models::Sor.new()
  16 + end
  17 + end
  18 + end
  19 + end
  20 +end
  21 +
... ...
lib/syspro/business_objects/schemas/sorqbs.xml.erb 0 → 100644
  1 +<?xml version="1.0" encoding="Windows-1252"?>
  2 +<Query xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORQBS.XSD">
  3 + <Option>
  4 + <IncludeSalesOrderDetails><%= @include_sales_order_details %></IncludeSalesOrderDetails>
  5 + <IncludeContractDetails><%= @include_contact_details %></IncludeContractDetails>
  6 + <IncludeDeliveryHistory><%= @include_delivery_history %></IncludeDeliveryHistory>
  7 + <IncludeUnconfirmedReleases><%= @include_unconfirmed_releases %></IncludeUnconfirmedReleases>
  8 + <IncludeConfirmedReleases><%= @include_confirmed_releases %></IncludeConfirmedReleases>
  9 + <IncludeReleaseDetails><%= @include_release_details %></IncludeReleaseDetails>
  10 + <IncludeReleaseHistory><%= @include_release_history %></IncludeReleaseHistory>
  11 + </Option>
  12 + <% unless @filters.empty? %>
  13 + <Filter>
  14 + <% for filter in @filters %>
  15 + <<%= filter[:name] %> FilterType="<% filter[:type] %>" FilterValue="<% filter[:value] %>"/>
  16 + <% end %>
  17 + </Filter>
  18 + <% end %>
  19 +</Query>
  20 +
... ...
lib/syspro/business_objects/sorqbs.rb 0 → 100644
  1 +# frozen_string_literal: true
  2 +
  3 +require 'syspro/business_objects/parsers/sorqbs_parser'
  4 +require 'erb'
  5 +
  6 +module Syspro
  7 + module BusinessObjects
  8 + class SorQbs < ApiResource
  9 + include Syspro::ApiOperations::Query
  10 + include Syspro::BusinessObjects::Parsers
  11 +
  12 + attr_accessor :include_sales_order_details, :include_contact_details, :include_delivery_history,
  13 + :include_unconfirmed_releases, :include_confirmed_releases, :include_release_details,
  14 + :include_release_history, :filters
  15 +
  16 + def call(user_id)
  17 + xml_in = template.result(binding)
  18 + business_object = 'SORQBS'
  19 + params = { 'UserId' => user_id, 'BusinessObject' => business_object, 'XmlIn' => xml_in }
  20 + resp = SorQbs.query(params)
  21 + parse_response(resp)
  22 + end
  23 +
  24 + def template
  25 + ERB.new File.read(File.expand_path('schemas/sorqbs.xml.erb', File.dirname(__FILE__))), nil, '%'
  26 + end
  27 +
  28 + def parse_response(resp)
  29 + handle_errors(resp)
  30 + parser = SorQbsParser.new(respo[0].data)
  31 + parser.parse
  32 + end
  33 +
  34 + def handle_errors(resp)
  35 + body = resp[0].http_body
  36 + raise SysproError, body if body =~ /^(ERROR)/
  37 + end
  38 + end
  39 + end
  40 +end
  41 +
... ...
test/cassettes/test_sor_query.yml 0 → 100644
  1 +---
  2 +http_interactions:
  3 +- request:
  4 + method: get
  5 + uri: http://syspro.wildlandlabs.com:90/SYSPROWCFService/Rest/logon?CompanyId=L&CompanyPassword=&Operator=wland&OperatorPassword=piperita2016
  6 + body:
  7 + encoding: US-ASCII
  8 + string: ''
  9 + headers:
  10 + User-Agent:
  11 + - Syspro/7 RubyBindings/1.0.0.alpha.1
  12 + Content-Type:
  13 + - application/x-www-form-urlencoded
  14 + Accept-Encoding:
  15 + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
  16 + Accept:
  17 + - "*/*"
  18 + response:
  19 + status:
  20 + code: 200
  21 + message: OK
  22 + headers:
  23 + Content-Length:
  24 + - '36'
  25 + Content-Type:
  26 + - application/octet-stream
  27 + Server:
  28 + - Microsoft-HTTPAPI/2.0
  29 + Date:
  30 + - Wed, 11 Apr 2018 19:00:49 GMT
  31 + body:
  32 + encoding: UTF-8
  33 + string: 'E621DED6B5E98C4783D130230F6B29E700 '
  34 + http_version:
  35 + recorded_at: Wed, 11 Apr 2018 19:00:49 GMT
  36 +- request:
  37 + method: get
  38 + uri: http://syspro.wildlandlabs.com:90/SYSPROWCFService/Rest/Query/Query?BusinessObject=SORQBS&UserId=E621DED6B5E98C4783D130230F6B29E700%20%20&XmlIn=%3C?xml%20version=%221.0%22%20encoding=%22Windows-1252%22?%3E%0A%3CQuery%20xmlns:xsd=%22http://www.w3.org/2001/XMLSchema-instance%22%20xsd:noNamespaceSchemaLocation=%22SORQBS.XSD%22%3E%0A%20%20%3COption%3E%0A%20%20%20%20%3CIncludeSalesOrderDetails%3Etrue%3C/IncludeSalesOrderDetails%3E%0A%20%20%20%20%3CIncludeContractDetails%3Etrue%3C/IncludeContractDetails%3E%0A%20%20%20%20%3CIncludeDeliveryHistory%3Etrue%3C/IncludeDeliveryHistory%3E%0A%20%20%20%20%3CIncludeUnconfirmedReleases%3Etrue%3C/IncludeUnconfirmedReleases%3E%0A%20%20%20%20%3CIncludeConfirmedReleases%3Etrue%3C/IncludeConfirmedReleases%3E%0A%20%20%20%20%3CIncludeReleaseDetails%3Etrue%3C/IncludeReleaseDetails%3E%0A%20%20%20%20%3CIncludeReleaseHistory%3Etrue%3C/IncludeReleaseHistory%3E%0A%20%20%3C/Option%3E%0A%20%20%20%0A%20%20%20%20%3CFilter%3E%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%3CCustomer%20FilterType=%22%22%20FilterValue=%22%22/%3E%0A%20%20%20%20%20%20%0A%20%20%20%20%3C/Filter%3E%0A%20%20%0A%3C/Query%3E%0A%0A
  39 + body:
  40 + encoding: US-ASCII
  41 + string: ''
  42 + headers:
  43 + User-Agent:
  44 + - Syspro/7 RubyBindings/1.0.0.alpha.1
  45 + Content-Type:
  46 + - application/x-www-form-urlencoded
  47 + Accept-Encoding:
  48 + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
  49 + Accept:
  50 + - "*/*"
  51 + response:
  52 + status:
  53 + code: 200
  54 + message: OK
  55 + headers:
  56 + Content-Length:
  57 + - '102'
  58 + Content-Type:
  59 + - application/octet-stream
  60 + Server:
  61 + - Microsoft-HTTPAPI/2.0
  62 + Date:
  63 + - Wed, 11 Apr 2018 19:00:53 GMT
  64 + body:
  65 + encoding: UTF-8
  66 + string: 'ERROR: Access denied to Functional Area ''SorBlanketSo'' for operator
  67 + ''WLAND'' (Business Object ''SORQBS'')'
  68 + http_version:
  69 + recorded_at: Wed, 11 Apr 2018 19:00:53 GMT
  70 +recorded_with: VCR 4.0.0
... ...
test/sor_test.rb 0 → 100644
  1 +# frozen_string_literal: true
  2 +
  3 +require 'test_helper'
  4 +
  5 +class SorTest < Minitest::Test
  6 + extend Minitest::Spec::DSL
  7 + before { VCR.insert_cassette name }
  8 + after { VCR.eject_cassette }
  9 +
  10 + let(:username) { 'wland' }
  11 + let(:password) { 'piperita2016' }
  12 + let(:company) { 'L' }
  13 + let(:company_password) { '' }
  14 + let(:user_id) do
  15 + Syspro::Logon.logon(username, password, company, company_password)
  16 + end
  17 +
  18 + def test_sor_query
  19 + sorqbs = Syspro::BusinessObjects::SorQbs.new
  20 +
  21 + sorqbs.include_sales_order_details = true
  22 + sorqbs.include_contact_details = true
  23 + sorqbs.include_delivery_history = true
  24 + sorqbs.include_unconfirmed_releases = true
  25 + sorqbs.include_confirmed_releases = true
  26 + sorqbs.include_release_details = true
  27 + sorqbs.include_release_history = true
  28 + sorqbs.filters = [
  29 + { name: 'Customer', type: 'A', value: 'JJJ001' }
  30 + ]
  31 +
  32 + sor_result = sorqbs.call(user_id.guid)
  33 + refute_nil sor_result
  34 + end
  35 +end
  36 +
... ...