telasi-ruby 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,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ coverage/*
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>telasi-ruby</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ </buildSpec>
9
+ <natures>
10
+ </natures>
11
+ </projectDescription>
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in telasi-ruby.gemspec
4
+ gemspec
@@ -0,0 +1,3 @@
1
+ # თელასის Ruby API
2
+
3
+ ეს ბიბლიოთეკა გამოიყენება [სს თელასის](http://telasi.ge)-ში.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,7 @@
1
+ sap:
2
+ adapter: oracle_enhanced
3
+ host: 192.168.1.83
4
+ username: ilia
5
+ password: ilia2012
6
+ database: erd
7
+ port: 1527
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'telasi-ruby/ext/active_record'
4
+ require 'telasi-ruby/version'
5
+ require 'telasi-ruby/model'
6
+ require 'telasi-ruby/converter'
@@ -0,0 +1,78 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module Telasi
4
+ module SAP
5
+
6
+ # თელასის საიდენტიფიკაციო ნომერი.
7
+ TELASI_TIN = '202052580'
8
+
9
+ # თელასის ოფიციალური დასახელება.
10
+ TELASI_NAME = 'ს.ს. თელასი'
11
+
12
+ # თელასის გადამხდელის ID.
13
+ TELASI_ID = 1000
14
+
15
+ # აკონვერტებს მოცემული მასალის დოკუმენტს ზედნადების ფორმატში.
16
+ # მიღებული ზედნადების კლასი შესაძლოა ატვირთულ იქნას
17
+ # rs.ge ვებ-საიტზე.
18
+ def self.material_doc_to_waybill(doc)
19
+ waybill = RS::Waybill.new
20
+
21
+ not_auto = nil
22
+ #with_auto = nil
23
+ doc.items.each do |item|
24
+ not_auto = item and break unless item.auto?
25
+ #with_auto = item if item.auto?
26
+ #break if not_auto and with_auto
27
+ end
28
+
29
+ # operation type
30
+ case not_auto.ebeln[0..1]
31
+ when '45' #
32
+ waybill.type = doc.driver_info ? RS::WaybillType::TRANSPORTATION : RS::WaybillType::WITHOUT_TRANSPORTATION
33
+ when '49' # შიდა გადაზიდვა
34
+ waybill.type = RS::WaybillType::INNER
35
+ waybill.seller_id = TELASI_ID
36
+ waybill.seller_tin = TELASI_TIN
37
+ waybill.seller_name = TELASI_NAME
38
+ waybill.check_buyer_tin = true
39
+ waybill.buyer_tin = TELASI_TIN
40
+ waybill.buyer_name = TELASI_NAME
41
+ else
42
+ #raise RuntimeError.new("not supported: #{ebeln}")
43
+ end
44
+
45
+ if doc.driver_info
46
+ waybill.car_number = doc.driver_info.vehicle
47
+ waybill.transport_type_id = RS::TransportType::VEHICLE
48
+ waybill.driver_name = doc.driver_info.driver
49
+ waybill.driver_tin = doc.driver_info.drperno
50
+ waybill.check_driver_tin = true
51
+ end
52
+
53
+ # start/end address
54
+ if not_auto
55
+ address1 = not_auto.warehouse_address
56
+ address2 = not_auto.invoice_address
57
+ waybill.start_address = address1.address.to_s if address1
58
+ waybill.end_address = address2.address.to_s if address2
59
+ end
60
+
61
+ # items
62
+ items = []
63
+ doc.items.each do |doc_item|
64
+ item = RS::WaybillItem.new
65
+ item.bar_code = doc_item.matnr.match(/[1-9][0-9]*/)[0]
66
+ item.prod_name = doc_item.material_name_ka.maktx
67
+ item.unit_id = RS::WaybillUnit::OTHERS
68
+ item.unit_name = doc_item.meins
69
+ item.quantity = doc_item.menge
70
+ item.price = doc_item.dmbtr / item.quantity
71
+ items << item
72
+ end
73
+ waybill.items = items
74
+
75
+ waybill
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module ActiveRecord
4
+ class Base
5
+ def self.date_fields(*fields)
6
+ fields.each do |field|
7
+ define_method("#{field}_date") do
8
+ date = send field.to_s
9
+ Date.strptime(date, '%Y%m%d') if date
10
+ end
11
+ define_method("#{field}_date=") do |value|
12
+ send( "#{field}=", value.strftime('%Y%m%d') ) if value
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,92 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'active_record'
4
+ require 'composite_primary_keys'
5
+
6
+ module Telasi
7
+
8
+ # Module containint SAP models and operations.
9
+ module SAP
10
+
11
+ # ქართული ენის კონსტანტა.
12
+ LANG_KA = '뱁'
13
+
14
+ SCHEMA = 'SAPSR3'
15
+
16
+ # Base class for SAP database.
17
+ class Base < ActiveRecord::Base
18
+ self.abstract_class = true
19
+ end
20
+
21
+ # MKPF table.
22
+ class MaterialDocumentHeader < Base
23
+ self.table_name = "#{SCHEMA}.MKPF"
24
+ self.primary_keys = [:mandt, :mblnr, :mjahr]
25
+ has_many :items, :class_name => 'Telasi::SAP::MaterialItem', :foreign_key => [:mandt, :mblnr, :mjahr]
26
+ has_one :driver_info, :foreign_key => [:mandt, :mblnr, :mjahr]
27
+ self.date_fields :bldat, :budat
28
+ end
29
+
30
+ # MSEG table.
31
+ class MaterialItem < Base
32
+ self.table_name = "#{SCHEMA}.MSEG"
33
+ self.primary_keys = [:mandt, :mblnr, :mjahr, :zeile]
34
+ #has_one :material_name_ka, :class_name => 'Telasi::SAP::MaterialText', :foreign_key => [:mandt, :matnr], :conditions => ['SPRAS = ?', LANG_KA]
35
+
36
+ def material_name_ka
37
+ MaterialText.where(:mandt => self.mandt, :matnr => self.matnr, :spras => LANG_KA).first
38
+ end
39
+
40
+ # საწყობის მისამართი (გასვლა).
41
+ def warehouse_address
42
+ WarehouseAddress.where(:werks => self.werks, :lgort => self.lgort).first
43
+ end
44
+
45
+ # შესყიდვის მისამართი (დანიშნულება).
46
+ def invoice_address
47
+ item = InvoiceItem.where(:ebeln => self.ebeln).first
48
+ WarehouseAddress.where(:werks => item.werks, :lgort => item.lgort).first if item
49
+ end
50
+
51
+ # არის თუ არა ეს პოზიცია დაგენერირებული ავტომატურად?
52
+ def auto?
53
+ self.xauto.upcase == 'X'
54
+ end
55
+ end
56
+
57
+ # EKPO table.
58
+ class InvoiceItem < Base
59
+ self.table_name = "#{SCHEMA}.EKPO"
60
+ self.primary_keys = [:mandt, :ebeln, :ebelp]
61
+ end
62
+
63
+ # TWLAD table.
64
+ class WarehouseAddress < Base
65
+ self.table_name = "#{SCHEMA}.TWLAD"
66
+ self.primary_keys = [:mandt, :werks, :lgort, :lfdnr]
67
+ belongs_to :address, :foreign_key => :adrnr, :conditions => ['LANGU = ?', LANG_KA]
68
+ end
69
+
70
+ # ADRC table.
71
+ class Address < Base
72
+ self.table_name = "#{SCHEMA}.ADRC"
73
+ self.primary_keys = :addrnumber
74
+ def to_s
75
+ [self.city1, self.street].compact.join(' ').strip
76
+ end
77
+ end
78
+
79
+ # ZMIGOHEADERADD table.
80
+ class DriverInfo < Base
81
+ self.table_name = "#{SCHEMA}.ZMIGOHEADERADD"
82
+ self.primary_keys = [:mandt, :mblnr, :mjahr]
83
+ end
84
+
85
+ # MAKT table.
86
+ class MaterialText < Base
87
+ self.table_name = "#{SCHEMA}.MAKT"
88
+ self.primary_keys = [:mandt, :matnr, :spras]
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module Telasi
4
+ module Ruby
5
+ VERSION = "0.0.1"
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ # SimpleCov
4
+
5
+ require 'simplecov'
6
+
7
+ SimpleCov.start do
8
+ add_filter '/spec/'
9
+ end
10
+
11
+ # RSpec
12
+
13
+ require 'rspec'
14
+
15
+ RSpec.configure do |config|
16
+ config.include(RSpec::Matchers)
17
+ config.backtrace_clean_patterns = [
18
+ /\/lib\d*\/ruby\//,
19
+ /bin\//,
20
+ #/gems/,
21
+ /spec\/spec_helper\.rb/,
22
+ /lib\/rspec\/(core|expectations|matchers|mocks)/
23
+ ]
24
+ end
25
+
26
+ ENV['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'
27
+
28
+ require 'active_record'
29
+ require 'telasi-ruby'
30
+
31
+ MANDT = '150'
32
+
33
+ ActiveRecord::Base.configurations = YAML::load(IO.read('config/database.yml'))
34
+ ActiveRecord::Base.establish_connection :sap
35
+ #Telasi::SAP::Base.establish_connection :sap
@@ -0,0 +1,81 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+ require 'rs'
5
+
6
+ describe 'material document without driver' do
7
+ before(:all) do
8
+ @doc = Telasi::SAP::MaterialDocumentHeader.find(MANDT, '5000000058', 2011)
9
+ end
10
+ subject { @doc }
11
+ it { should_not be_nil }
12
+ its(:mandt) { should == MANDT }
13
+ its(:mblnr) { should == '5000000058' }
14
+ its(:items) { should_not be_empty }
15
+ its(:bldat_date) { should be_instance_of Date }
16
+ its(:budat_date) { should be_instance_of Date }
17
+ context 'convert into RS waybill' do
18
+ before(:all) do
19
+ @waybill = Telasi::SAP.material_doc_to_waybill(@doc)
20
+ end
21
+ subject { @waybill }
22
+ it { should_not be_nil }
23
+ it { should be_instance_of RS::Waybill }
24
+ its(:type) { should == RS::WaybillType::INNER }
25
+ its(:seller_id) { should == Telasi::SAP::TELASI_ID }
26
+ its(:seller_name) { should == Telasi::SAP::TELASI_NAME }
27
+ its(:seller_tin) { should == Telasi::SAP::TELASI_TIN }
28
+ its(:buyer_name) { should == Telasi::SAP::TELASI_NAME }
29
+ its(:buyer_tin) { should == Telasi::SAP::TELASI_TIN }
30
+ its(:check_buyer_tin) { should == true }
31
+ its(:start_address) { should == 'ვანის ქ.#3' }
32
+ its(:end_address) { should == 'ვანის ქ.#3' }
33
+ context "items" do
34
+ subject { @waybill.items }
35
+ it { should_not be_nil }
36
+ it { should_not be_empty }
37
+ its(:size) { should == @waybill.items.size }
38
+ context "first item" do
39
+ subject { @waybill.items.first }
40
+ its(:prod_name) { should == 'მაერთებელი განშტოების P2X-95' }
41
+ its(:quantity) { should == 50 }
42
+ its(:unit_id) { should == RS::WaybillUnit::OTHERS }
43
+ its(:bar_code) { should == '100002658' }
44
+ its(:unit_name) { should == 'ST' }
45
+ its(:price) { should == 0 }
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ describe 'material document without driver' do
52
+ before(:all) do
53
+ @doc = Telasi::SAP::MaterialDocumentHeader.find(MANDT, '4900042419', 2011)
54
+ end
55
+ subject { @doc }
56
+ it { should_not be_nil }
57
+ its(:mandt) { should == MANDT }
58
+ its(:mblnr) { should == '4900042419' }
59
+ context 'convert into RS waybill' do
60
+ before(:all) do
61
+ @waybill = Telasi::SAP.material_doc_to_waybill(@doc)
62
+ RS.print_waybill(@waybill, '/home/dimitri/Desktop/waybill.pdf')
63
+ end
64
+ subject { @waybill }
65
+ it { should_not be_nil }
66
+ its(:type) { should == RS::WaybillType::INNER }
67
+ its(:car_number) { should_not be_empty }
68
+ its(:transport_type_id) { should == RS::TransportType::VEHICLE }
69
+ its(:driver_tin) { should == '36001024775' }
70
+ end
71
+ end
72
+
73
+ describe Telasi::SAP::MaterialItem do
74
+ before(:all) do
75
+ @item = Telasi::SAP::MaterialItem.find(MANDT, '5000000058', 2011, 1)
76
+ end
77
+ subject { @item }
78
+ it { should_not be_nil }
79
+ its(:mandt) { should == MANDT }
80
+ its(:mblnr) { should == '5000000058' }
81
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "telasi-ruby/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "telasi-ruby"
7
+ s.version = Telasi::Ruby::VERSION
8
+ s.authors = ["Dimitri Kurashvili"]
9
+ s.email = ["dimitri@c12.ge"]
10
+ s.homepage = ""
11
+ s.summary = %q{telasi ruby library}
12
+ s.description = %q{telasi ruby library}
13
+
14
+ s.rubyforge_project = "telasi-ruby"
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 'composite_primary_keys', '~> 5'
25
+ s.add_runtime_dependency 'c12-commons', '~> 0.0.2'
26
+ s.add_runtime_dependency 'rs.ge', '~>0.0.7'
27
+ s.add_runtime_dependency 'activerecord', '~> 3.2.2'
28
+ s.add_runtime_dependency 'activerecord-oracle_enhanced-adapter', '~> 1.4.0'
29
+ s.add_runtime_dependency 'ruby-oci8', '~> 2.1.0'
30
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: telasi-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dimitri Kurashvili
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &82524230 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *82524230
25
+ - !ruby/object:Gem::Dependency
26
+ name: simplecov
27
+ requirement: &82524030 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *82524030
36
+ - !ruby/object:Gem::Dependency
37
+ name: composite_primary_keys
38
+ requirement: &82523760 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '5'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *82523760
47
+ - !ruby/object:Gem::Dependency
48
+ name: c12-commons
49
+ requirement: &82523510 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.2
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *82523510
58
+ - !ruby/object:Gem::Dependency
59
+ name: rs.ge
60
+ requirement: &82523280 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.0.7
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *82523280
69
+ - !ruby/object:Gem::Dependency
70
+ name: activerecord
71
+ requirement: &82523050 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 3.2.2
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *82523050
80
+ - !ruby/object:Gem::Dependency
81
+ name: activerecord-oracle_enhanced-adapter
82
+ requirement: &82522820 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.4.0
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *82522820
91
+ - !ruby/object:Gem::Dependency
92
+ name: ruby-oci8
93
+ requirement: &82522590 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 2.1.0
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *82522590
102
+ description: telasi ruby library
103
+ email:
104
+ - dimitri@c12.ge
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - .gitignore
110
+ - .project
111
+ - .rspec
112
+ - Gemfile
113
+ - README.md
114
+ - Rakefile
115
+ - config/database.yml
116
+ - lib/telasi-ruby.rb
117
+ - lib/telasi-ruby/converter.rb
118
+ - lib/telasi-ruby/ext/active_record.rb
119
+ - lib/telasi-ruby/model.rb
120
+ - lib/telasi-ruby/version.rb
121
+ - spec/spec_helper.rb
122
+ - spec/telasi-ruby/model_spec.rb
123
+ - telasi-ruby.gemspec
124
+ homepage: ''
125
+ licenses: []
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project: telasi-ruby
144
+ rubygems_version: 1.8.13
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: telasi ruby library
148
+ test_files: []
149
+ has_rdoc: