rs.ge 0.0.1

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.
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rs/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rs.ge"
7
+ s.version = RS::VERSION
8
+ s.authors = ["Dimitri Kurashvili"]
9
+ s.email = ["dimitri@c12.ge"]
10
+ s.homepage = "http://c12.ge"
11
+ s.summary = %q{rs.ge web services}
12
+ s.description = %q{ruby client for rs.ge web services}
13
+
14
+ s.rubyforge_project = "rs"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency 'rspec', '~> 2'
22
+ s.add_development_dependency 'simplecov'
23
+
24
+ s.add_runtime_dependency 'savon'
25
+ s.add_runtime_dependency 'httpi'
26
+ end
@@ -0,0 +1,175 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ # excise codes
5
+
6
+ describe 'getting excise codes' do
7
+ before(:all) do
8
+ @codes = RS.get_excise_codes(RS.su_params)
9
+ end
10
+ subject { @codes }
11
+ it { should_not be_nil }
12
+ it { should_not be_empty }
13
+ context "first code" do
14
+ subject {@codes.first}
15
+ it { should be_instance_of RS::ExciseCode }
16
+ its(:id) { should_not be_nil }
17
+ its(:name) { should_not be_nil }
18
+ its(:name) { should_not be_empty }
19
+ its(:code) { should_not be_empty }
20
+ its(:measure) { should_not be_nil }
21
+ its(:value) { should_not be_nil }
22
+ its(:value) { should > 0 }
23
+ end
24
+ end
25
+
26
+ describe 'excise name normalization' do
27
+ context 'name (1234) _ msr _ (1)' do
28
+ subject { RS.normalize_excise_name('name (1234) _ msr _ (1)') }
29
+ it { should == 'name' }
30
+ end
31
+ context 'name (019048999) _ msr _ (1)' do
32
+ subject { RS.normalize_excise_name('name (019048999) _ msr _ (1)') }
33
+ it { should == 'name' }
34
+ end
35
+ end
36
+
37
+ # waybill types
38
+
39
+ describe 'getting waybill types' do
40
+ before(:all) do
41
+ @types = RS.get_waybill_types(RS.su_params)
42
+ end
43
+ subject { @types }
44
+ it { should_not be_nil }
45
+ it { should_not be_empty }
46
+ context 'first type' do
47
+ subject { @types.first }
48
+ it { should be_instance_of WaybillType }
49
+ its(:id) { should_not be_nil }
50
+ its(:name) { should_not be_nil }
51
+ its(:name) { should_not be_empty }
52
+ end
53
+ end
54
+
55
+ def waybill_type_creation_test(id)
56
+ context "WaybillType with ID=#{id}" do
57
+ subject { WaybillType.create_from_id(id) }
58
+ it { should be_instance_of WaybillType }
59
+ its(:id) { should == id }
60
+ its(:name) { should == WaybillType::NAMES[id]}
61
+ end
62
+ end
63
+
64
+ describe WaybillType do
65
+ waybill_type_creation_test WaybillType::INNER
66
+ waybill_type_creation_test WaybillType::TRANSPORTATION
67
+ waybill_type_creation_test WaybillType::WITHOUT_TRANSPORTATION
68
+ waybill_type_creation_test WaybillType::DISTRIBUTION
69
+ waybill_type_creation_test WaybillType::RETURN
70
+ waybill_type_creation_test WaybillType::SUB_WAYBILL
71
+ end
72
+
73
+ # waybill units
74
+
75
+ describe 'getting waybill units' do
76
+ before(:all) do
77
+ @units = RS.get_waybill_units(RS.su_params)
78
+ end
79
+ subject { @units }
80
+ it { should_not be_nil }
81
+ it { should_not be_empty }
82
+ context 'first unit' do
83
+ subject{ @units.first }
84
+ it { should_not be_nil }
85
+ it { should be_instance_of WaybillUnit }
86
+ its(:id) { should_not be_nil }
87
+ its(:name) { should_not be_nil }
88
+ its(:name) { should_not be_empty }
89
+ end
90
+ end
91
+
92
+ # transport types
93
+
94
+ describe 'getting transport types' do
95
+ before(:all) do
96
+ @types = RS.get_transport_types(RS.su_params)
97
+ end
98
+ subject { @types }
99
+ it { should_not be_nil }
100
+ it { should_not be_empty }
101
+ context 'first type' do
102
+ subject { @types.first }
103
+ it { should_not be_nil }
104
+ it { should be_instance_of TransportType }
105
+ its(:id) { should_not be_nil }
106
+ its(:name) { should_not be_nil }
107
+ its(:name) { should_not be_empty }
108
+ end
109
+ end
110
+
111
+ # bar codes
112
+
113
+ describe 'save and delete bar code' do
114
+ before(:all) do
115
+ @resp = RS.save_bar_code(RS.su_params.merge('bar_code' => '001', 'prod_name' => 'Apple', 'unit_id' => 1, 'unit_name' => 'kg', 'excise_id' => nil))
116
+ end
117
+ subject { @resp }
118
+ it { should be_true }
119
+ context 'delete this bar code' do
120
+ before(:all) do
121
+ @resp_delete = RS.delete_bar_code(RS.su_params.merge('bar_code' => 'inv/1'))
122
+ end
123
+ subject { @resp_delete }
124
+ it { should be_true }
125
+ end
126
+ end
127
+
128
+ describe 'get bar codes' do
129
+ before(:all) do
130
+ RS.save_bar_code(RS.su_params.merge({'bar_code' => 'TV1', 'prod_name' => 'tv set 1', 'unit_id' => RS::WaybillUnit::OTHERS, 'unit_name' => 'box'}))
131
+ RS.save_bar_code(RS.su_params.merge({'bar_code' => 'TV2', 'prod_name' => 'tv set 2', 'unit_id' => RS::WaybillUnit::OTHERS, 'unit_name' => 'box'}))
132
+ end
133
+ context "look up first code" do
134
+ before(:all) do
135
+ @codes = RS.get_bar_codes(RS.su_params.merge({'bar_code' => 'TV1'}))
136
+ end
137
+ subject { @codes }
138
+ it { should_not be_nil }
139
+ it { should_not be_empty }
140
+ its(:size) { should == 1 }
141
+ context 'TV1 bar code' do
142
+ subject { @codes.first }
143
+ it { should be_instance_of RS::BarCode }
144
+ its(:code) { should == 'TV1' }
145
+ its(:name) { should == 'tv set 1' }
146
+ its(:unit_id) { should == RS::WaybillUnit::OTHERS }
147
+ its(:excise_id) { should be_nil }
148
+ end
149
+ end
150
+ context "lookup both codes" do
151
+ before(:all) do
152
+ @codes = RS.get_bar_codes(RS.su_params.merge({'bar_code' => 'TV'}))
153
+ end
154
+ subject { @codes }
155
+ it { should_not be_nil }
156
+ it { should_not be_empty }
157
+ its(:size) { should == 2 }
158
+ context 'TV1 bar code' do
159
+ subject { @codes.first }
160
+ it { should be_instance_of RS::BarCode }
161
+ its(:code) { should == 'TV1' }
162
+ its(:name) { should == 'tv set 1' }
163
+ its(:unit_id) { should == RS::WaybillUnit::OTHERS }
164
+ its(:excise_id) { should be_nil }
165
+ end
166
+ context 'TV2 bar code' do
167
+ subject { @codes[1] }
168
+ it { should be_instance_of RS::BarCode }
169
+ its(:code) { should == 'TV2' }
170
+ its(:name) { should == 'tv set 2' }
171
+ its(:unit_id) { should == RS::WaybillUnit::OTHERS }
172
+ its(:excise_id) { should be_nil }
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ IP_PATTERN = /^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$/
5
+
6
+ describe 'what is my IP' do
7
+ before(:all) do
8
+ @ip = RS.what_is_my_ip
9
+ end
10
+ subject { @ip }
11
+ it { should match IP_PATTERN }
12
+ end
13
+
14
+ describe 'get service users' do
15
+ before(:all) do
16
+ @org = RS::TEST_ORG1
17
+ @users = RS.get_service_users(RS.auth_params)
18
+ end
19
+ subject { @users }
20
+ it { should_not be_empty }
21
+ context 'one of the users' do
22
+ subject { @users.first }
23
+ it('should not have empty ID') { subject.id.should_not be_nil }
24
+ it('should not have empty USER_NAME') { subject.user_name.should_not be_nil }
25
+ it('should not have empty PAYER_ID') { subject.payer_id.should_not be_nil }
26
+ it('should have correct IP') { subject.ip.should match IP_PATTERN }
27
+ it('should have some NAME') { subject.name.should_not be_nil }
28
+ end
29
+ end
30
+
31
+ describe 'check service user' do
32
+ before(:all) do
33
+ @user = RS.check_service_user(RS.su_params)
34
+ end
35
+ subject { @user }
36
+ it { should be_instance_of User }
37
+ its(:id) { should_not be_nil }
38
+ its(:payer_id) { should_not be_nil }
39
+ its(:user_name) { should_not be_nil }
40
+ its(:user_name) { should == RS::SU_NAME }
41
+ its(:name) { should be_nil }
42
+ its(:ip) { should be_nil }
43
+ end
44
+
45
+ describe 'check service user with illegal password' do
46
+ before(:all) do
47
+ @user = RS.check_service_user('su' => RS::SU_NAME, 'sp' => 'someincorrectpassword')
48
+ end
49
+ subject { @user }
50
+ it { should be_nil }
51
+ end
52
+
53
+ describe 'update service user' do
54
+ before(:all) do
55
+ @org = RS::TEST_ORG1
56
+ @ip = RS.what_is_my_ip
57
+ @resp = RS.update_service_user( RS.auth_params.merge(RS.su_params).merge({ 'ip' => @ip, 'name' => 'c12' }) )
58
+ end
59
+ subject { @resp }
60
+ it { should be_true }
61
+ end
62
+
63
+ describe 'get name from TIN' do
64
+ before(:all) do
65
+ @name = RS.get_name_from_tin(RS.su_params.merge('tin' => '422430239'))
66
+ end
67
+ subject { @name }
68
+ it { should == 'შპს ც12' }
69
+ end
@@ -0,0 +1,84 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ def waybill_skeleton(params = {})
5
+ waybill = RS::Waybill.new
6
+ waybill.id = params[:id]
7
+ waybill.type = params[:type] ? params[:type] : RS::WaybillType::TRANSPORTATION
8
+ waybill.status = params[:status] ? params[:status] : RS::Waybill::STATUS_START
9
+ waybill.seller_id = params[:seller_id] ? params[:seller_id] : 731937
10
+ waybill.buyer_tin = params[:buyer_tin] ? params[:buyer_tin] : '12345678910'
11
+ waybill.check_buyer_tin = params[:check_buyer_tin] ? params[:check_buyer_tin] : true
12
+ waybill.buyer_name = params[:buyer_name] ? params[:buyer_name] : 'სატესტო მყიდველი'
13
+ waybill.start_address = params[:start_address] ? params[:start_address] : 'თბილისი'
14
+ waybill.end_address = params[:end_address] ? params[:end_address] : 'სოხუმი'
15
+ waybill.transport_type_id = params[:transport_type] ? params[:transport_type] : RS::TransportType::VEHICLE
16
+ waybill.start_date = params[:start_date] ? params[:start_date] : Time.now
17
+ if waybill.transport_type_id == RS::TransportType::VEHICLE
18
+ waybill.car_number = params[:car_number] ? params[:car_number] : 'WDW842'
19
+ waybill.driver_name = params[:driver_name] ? params[:driver_name] : 'დიმიტრი ყურაშვილი'
20
+ waybill.driver_tin = params[:driver_tin] ? params[:driver_tin] : '02001000490'
21
+ else
22
+ waybill.car_number = params[:car_number]
23
+ waybill.driver_name = params[:driver_name]
24
+ waybill.driver_tin = params[:driver_tin]
25
+ end
26
+
27
+ if params[:items]
28
+ items = []
29
+ params[:items].each do |item|
30
+ item = WaybillItem.new
31
+ item.prod_name = item[:name]
32
+ item.unit_id = item[:unit_id]
33
+ item.unit_name = item[:unit_name]
34
+ item.quantity = item[:quantity]
35
+ item.price = item[:price]
36
+ item.bar_code = item[:code]
37
+ items << item
38
+ end
39
+ else
40
+ item = WaybillItem.new
41
+ item.prod_name = 'სატესტო საქონელი'
42
+ item.unit_id = 99
43
+ item.unit_name = 'ერთეული'
44
+ item.quantity = 2
45
+ item.price = 5
46
+ item.bar_code = '123'
47
+ items = [item]
48
+ end
49
+ waybill.items = items
50
+
51
+ waybill
52
+ end
53
+
54
+ describe 'save waybill' do
55
+ before(:all) do
56
+ @waybill = waybill_skeleton
57
+ RS.save_waybill(@waybill, RS.su_params)
58
+ end
59
+ subject { @waybill }
60
+ its(:status) { should == 0 }
61
+ its(:id) { should_not be_nil }
62
+ its(:id) { should > 0 }
63
+ its(:error_code) { should == 0 }
64
+ context 'items' do
65
+ subject { @waybill.items }
66
+ its(:size) { should == 1 }
67
+ context 'first item' do
68
+ subject { @waybill.items.first }
69
+ its(:id) { should_not be_nil }
70
+ its(:id) { should > 0 }
71
+ end
72
+ end
73
+ end
74
+
75
+ describe 'save waybill with large production name' do
76
+ before(:all) do
77
+ @waybill = waybill_skeleton
78
+ @waybill.items[0].prod_name = '1234567890'*30 + '1' # 301 სიმბოლო შეცდომითია
79
+ RS.save_waybill(@waybill, RS.su_params)
80
+ end
81
+ subject { @waybill }
82
+ its(:error_code) { should == -1 }
83
+ its(:id) { should be_nil }
84
+ end
@@ -0,0 +1,50 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ # Savon (SOAP client)
4
+
5
+ require 'savon'
6
+
7
+ HTTPI.log = false
8
+ Savon.log = false
9
+
10
+ # SimpleCov
11
+
12
+ require 'simplecov'
13
+
14
+ SimpleCov.start do
15
+ add_filter '/spec/'
16
+ end
17
+
18
+ # RSpec
19
+
20
+ require 'rspec'
21
+ require 'rs'
22
+
23
+ RSpec.configure do |config|
24
+ config.include(RSpec::Matchers)
25
+ end
26
+
27
+ # RS namespace is included by default
28
+
29
+ include RS
30
+
31
+ # Test organizations provided by RS.GE service
32
+
33
+ module RS
34
+ unless defined?(TEST_ORG1) and defined?(TEST_ORG2)
35
+ TEST_ORG1 = { :user => 'tbilisi', :password => '123456', :taxid => '206322102'}
36
+ TEST_ORG2 = { :user => 'satesto2', :password => '123456', :taxid => '12345678910'}
37
+ end
38
+ unless defined?(SU_NAME) and defined?(SU_PSWD)
39
+ SU_NAME = 'dimitri1979'
40
+ SU_PSWD = '123456'
41
+ end
42
+ def su_params
43
+ {'su' => SU_NAME, 'sp' => SU_PSWD}
44
+ end
45
+ def auth_params(org = 1)
46
+ u = org == 1 ? TEST_ORG1[:user] : TEST_ORG2[:user]
47
+ p = org == 2 ? TEST_ORG1[:password] : TEST_ORG2[:password]
48
+ {'user_name' => u, 'user_password' => p}
49
+ end
50
+ end
data/test.rb ADDED
@@ -0,0 +1,185 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'savon'
3
+
4
+ client = Savon::Client.new 'http://services.rs.ge/WayBillService/WayBillService.asmx?WSDL'
5
+
6
+ wb = %Q{
7
+ <WAYBILL>
8
+ <SUB_WAYBILLS/>
9
+ <GOODS_LIST>
10
+ <GOODS>
11
+ <ID>0</ID>
12
+ <W_NAME>მწვანე ბარდა მარნეული 520გრ</W_NAME>
13
+ <UNIT_ID>2</UNIT_ID>
14
+ <UNIT_TXT>ცალი</UNIT_TXT>
15
+ <QUANTITY>1</QUANTITY>
16
+ <PRICE>2.09</PRICE>
17
+ <AMOUNT>2.09</AMOUNT>
18
+ <BAR_CODE>11</BAR_CODE>
19
+ <A_ID>0</A_ID>
20
+ </GOODS>
21
+ </GOODS_LIST>
22
+ <ID>0</ID>
23
+ <TYPE>5</TYPE>
24
+ <CREATE_DATE>2012-02-12T22:56:48</CREATE_DATE>
25
+ <BUYER_TIN>211336240</BUYER_TIN>
26
+ <CHEK_BUYER_TIN>0</CHEK_BUYER_TIN>
27
+ <BUYER_NAME>ნიკორა</BUYER_NAME>
28
+ <START_ADDRESS>ყანთელის 9</START_ADDRESS>
29
+ <END_ADDRESS>ჭავჭავაძის 24</END_ADDRESS>
30
+ <DRIVER_TIN>12345678910</DRIVER_TIN>
31
+ <CHEK_DRIVER_TIN>0</CHEK_DRIVER_TIN>
32
+ <DRIVER_NAME>დიმიტრი ობოლაშვილი</DRIVER_NAME>
33
+ <TRANSPORT_COAST>0</TRANSPORT_COAST>
34
+ <RECEPTION_INFO/>
35
+ <RECEIVER_INFO/>
36
+ <DELIVERY_DATE/>
37
+ <STATUS>1</STATUS>
38
+ <SELER_UN_ID>731937</SELER_UN_ID>
39
+ <ACTIVATE_DATE/>
40
+ <PAR_ID/>
41
+ <CAR_NUMBER>ABK852</CAR_NUMBER>
42
+ <BEGIN_DATE>2012-01-25T20:54:36</BEGIN_DATE>
43
+ <TRAN_COST_PAYER>0</TRAN_COST_PAYER>
44
+ <TRANS_ID>3</TRANS_ID>
45
+ <TRANS_TXT/>
46
+ <COMMENT/>
47
+ </WAYBILL>
48
+ }
49
+
50
+ #resp = client.request 'get_waybill' do
51
+ # soap.body = {'su'=>'dimitri1979','sp'=>'123456','waybill_id'=>'0000003171'}
52
+ #end
53
+
54
+ # resp = client.request 'SAVE_WAYBILL'.downcase do
55
+ # soap.body = {
56
+ # 'su' => 'dimitri1979',
57
+ # 'sp' => '123456',
58
+ # 'waybill!' => wb
59
+ # }
60
+ # end
61
+
62
+ #, :body => { 'waybill!' => '<a>Some XML</a>' }
63
+
64
+ # puts '-------------------'
65
+ # puts resp.to_hash
66
+ # puts '-------------------'
67
+ # puts resp.to_xml
68
+
69
+ body = { 'rs:save_waybill' => {'rs:su' => 'dimitri1979', 'rs:sp' => '123456', 'rs:waybill!' => wb }}
70
+ namespaces = { 'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/', 'xmlns:rs' => 'http://tempuri.org/' }
71
+ wb_xml = Gyoku.xml( {'saopenv:Envelope' => { 'saopenv:Header' => {}, 'saopenv:Body' => body }, :attributes! => {'saopenv:Envelope' => namespaces}} )
72
+ #puts wb_xml
73
+ #resp = client.request 'save_waybill' do
74
+ # soap.xml = %Q{<?xml version="1.0" encoding="utf-8"?>#{wb_xml}}
75
+ #end
76
+
77
+ # ეს არის ზედნადების ხაზი საქონლისთვის.
78
+ class WaybillItem
79
+ attr_accessor :id, :prod_name, :unit_id, :unit_name, :quantity, :price, :bar_code, :excise_id
80
+ attr_accessor :error_code, :status_code
81
+
82
+ # აბრუნებს ამ ხაზის XML წარმოდგენას.
83
+ # @param xml XML builder-ის კლასი
84
+ def to_xml(xml)
85
+ xml.GOODS do |b|
86
+ b.ID (self.id ? self.id : 0)
87
+ b.W_NAME self.prod_name
88
+ b.UNIT_ID self.unit_id
89
+ b.UNIT_TXT self.unit_name
90
+ b.QUANTITY self.quantity
91
+ b.PRICE self.price
92
+ b.AMOUNT self.quantity * self.price
93
+ b.BAR_CODE self.bar_code
94
+ b.A_ID (self.excise_id ? self.excise_id : 0)
95
+ end
96
+ end
97
+ end
98
+
99
+ # ეს არის ზედნადების კლასი.
100
+ class Waybill
101
+ TRANSPORTATION_PAID_BY_BUYER = 1
102
+ TRANSPORTATION_PAID_BY_SELLER = 2
103
+ STATUS_START = 0
104
+ STATUS_ACTIVE = 1
105
+ attr_accessor :id, :type, :status, :parent_id
106
+ attr_accessor :seller_id # გამყიდველის უნიკალური კოდი
107
+ attr_accessor :buyer_tin, :check_buyer_tin, :buyer_name
108
+ attr_accessor :seller_info, :buyer_info # გამყიდველის/მყიდველის თანამდებობა, სახელი და გვარი
109
+ attr_accessor :driver_tin, :check_driver_tin, :driver_name
110
+ attr_accessor :start_address, :end_address
111
+ attr_accessor :transportation_cost, :transportation_cost_payer, :transport_type_id, :transport_type_name, :car_number
112
+ attr_accessor :comment
113
+ attr_accessor :start_date, :delivery_date
114
+ attr_accessor :items
115
+
116
+ def to_xml(xml)
117
+ xml.WAYBILL do |b|
118
+ b.GOODS_LIST do |g|
119
+ (self.items || []).each do |item|
120
+ item.to_xml g
121
+ end
122
+ end
123
+ b.ID (self.id ? self.id : 0)
124
+ b.TYPE self.type
125
+ b.BUYER_TIN self.buyer_tin
126
+ b.CHEK_BUYER_TIN (self.check_buyer_tin ? 1 : 0)
127
+ b.BUYER_NAME self.buyer_name
128
+ b.START_ADDRESS self.start_address
129
+ b.END_ADDRESS self.end_address
130
+ b.DRIVER_TIN self.driver_tin
131
+ b.CHEK_DRIVER_TIN (self.check_driver_tin ? 1 : 0)
132
+ b.DRIVER_NAME self.driver_name
133
+ b.TRANSPORT_COAST (self.transportation_cost ? self.transportation_cost : 0)
134
+ b.RECEPTION_INFO self.seller_info
135
+ b.RECEIVER_INFO self.buyer_info
136
+ b.DELIVERY_DATE (self.delivery_date ? self.delivery_date.strftime('%Y-%m-%dT%H:%M:%S') : '')
137
+ b.STATUS self.status
138
+ b.SELER_UN_ID self.seller_id
139
+ b.PAR_ID (self.parent_id ? self.parent_id : '')
140
+ b.CAR_NUMBER self.car_number
141
+ b.BEGIN_DATE (self.start_date ? self.start_date.strftime('%Y-%m-%dT%H:%M:%S') : '')
142
+ b.TRANS_COST_PAYER (self.transportation_cost_payer ? self.transportation_cost_payer : Waybill::TRANSPORTATION_PAID_BY_BUYER)
143
+ b.TRANS_ID self.transport_type_id
144
+ b.TRANS_TXT self.transport_type_name
145
+ b.COMMENT self.comment
146
+ end
147
+ end
148
+ end
149
+
150
+ waybill = Waybill.new
151
+ waybill.type = 2
152
+ waybill.status = Waybill::STATUS_START
153
+ waybill.seller_id = 731937
154
+ waybill.buyer_tin = '12345678910'
155
+ waybill.check_buyer_tin = true
156
+ waybill.buyer_name = 'სატესტო ორგანიზაცია - 2'
157
+ waybill.start_address = 'Tbilisi'
158
+ waybill.end_address = 'Sokhumi'
159
+ waybill.transport_type_id = 1
160
+ waybill.driver_name = 'დიმიტრი ყურაშვილი'
161
+ waybill.car_number = 'WDW842'
162
+ waybill.driver_tin = '02001000490'
163
+ waybill.start_date = Time.now
164
+
165
+ item = WaybillItem.new
166
+ item.prod_name = 'კიტრი'
167
+ item.unit_id = 99
168
+ item.unit_name = 'კგ'
169
+ item.quantity = 10
170
+ item.price = 10
171
+ item.bar_code = '1234'
172
+
173
+ waybill.items = []
174
+ waybill.items << item
175
+
176
+ resp = client.request 'save_waybill' do |soap|
177
+ #xml = Builder::XmlMarkup.new
178
+ soap.body do |xml|
179
+ xml.ins0 :su, 'dimitri1979'
180
+ xml.ins0 :sp, '123456'
181
+ xml.ins0 :waybill do |b|
182
+ waybill.to_xml b
183
+ end
184
+ end
185
+ end