telasi-ruby 0.0.1

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