mercator_mesonic 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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.rdoc +16 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/mercator_mesonic/application.js +13 -0
  6. data/app/assets/stylesheets/mercator_mesonic/application.css +13 -0
  7. data/app/controllers/mercator_mesonic/application_controller.rb +4 -0
  8. data/app/helpers/mercator_mesonic/application_helper.rb +4 -0
  9. data/app/models/mercator_mesonic/akt_mandant.rb +27 -0
  10. data/app/models/mercator_mesonic/base.rb +7 -0
  11. data/app/models/mercator_mesonic/belegart.rb +17 -0
  12. data/app/models/mercator_mesonic/kontakte_stamm.rb +60 -0
  13. data/app/models/mercator_mesonic/kontenstamm.rb +63 -0
  14. data/app/models/mercator_mesonic/kontenstamm_adresse.rb +66 -0
  15. data/app/models/mercator_mesonic/kontenstamm_fakt.rb +35 -0
  16. data/app/models/mercator_mesonic/kontenstamm_fibu.rb +37 -0
  17. data/app/models/mercator_mesonic/order.rb +131 -0
  18. data/app/models/mercator_mesonic/order_item.rb +101 -0
  19. data/app/models/mercator_mesonic/price.rb +51 -0
  20. data/app/models/mercator_mesonic/webartikel.rb +140 -0
  21. data/app/models/mercator_mesonic/zahlungsart.rb +25 -0
  22. data/config/routes.rb +2 -0
  23. data/db/migrate/20140319161842_add_erp_updated_at_to_inventory.rb +9 -0
  24. data/db/migrate/20140325093328_add_erp_contact_nr_erp_account_nr_to_user.rb +15 -0
  25. data/lib/mercator_mesonic/engine.rb +5 -0
  26. data/lib/mercator_mesonic/version.rb +3 -0
  27. data/lib/mercator_mesonic.rb +4 -0
  28. data/lib/tasks/mercator_mesonic_tasks.rake +4 -0
  29. data/test/dummy/README.rdoc +28 -0
  30. data/test/dummy/Rakefile +6 -0
  31. data/test/dummy/app/assets/javascripts/application.js +13 -0
  32. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  33. data/test/dummy/app/controllers/application_controller.rb +5 -0
  34. data/test/dummy/app/helpers/application_helper.rb +2 -0
  35. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  36. data/test/dummy/bin/bundle +3 -0
  37. data/test/dummy/bin/rails +4 -0
  38. data/test/dummy/bin/rake +4 -0
  39. data/test/dummy/config/application.rb +23 -0
  40. data/test/dummy/config/boot.rb +5 -0
  41. data/test/dummy/config/database.yml +25 -0
  42. data/test/dummy/config/environment.rb +5 -0
  43. data/test/dummy/config/environments/development.rb +29 -0
  44. data/test/dummy/config/environments/production.rb +80 -0
  45. data/test/dummy/config/environments/test.rb +36 -0
  46. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  47. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  48. data/test/dummy/config/initializers/inflections.rb +16 -0
  49. data/test/dummy/config/initializers/mime_types.rb +5 -0
  50. data/test/dummy/config/initializers/secret_token.rb +12 -0
  51. data/test/dummy/config/initializers/session_store.rb +3 -0
  52. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  53. data/test/dummy/config/locales/en.yml +23 -0
  54. data/test/dummy/config/routes.rb +4 -0
  55. data/test/dummy/config.ru +4 -0
  56. data/test/dummy/public/404.html +58 -0
  57. data/test/dummy/public/422.html +58 -0
  58. data/test/dummy/public/500.html +57 -0
  59. data/test/dummy/public/favicon.ico +0 -0
  60. data/test/fixtures/mercator_mesonic/bases.yml +11 -0
  61. data/test/integration/navigation_test.rb +10 -0
  62. data/test/mercator_mesonic_test.rb +7 -0
  63. data/test/models/mercator_mesonic/base_test.rb +9 -0
  64. data/test/test_helper.rb +15 -0
  65. metadata +172 -0
data/README.rdoc ADDED
@@ -0,0 +1,16 @@
1
+ = MercatorMesonic
2
+
3
+ Mercator_Mesonic provides Mesonic ERP integration for the Mercator Guided Selling Application.
4
+
5
+ This project uses the GPL V3 license. See file LICENSE in the same directory for details about the GPL V3.
6
+
7
+ # Installation instructions
8
+
9
+ 1. Put in your Gemfile
10
+ '''ruby
11
+ gem "mercator_mesonic"
12
+ '''
13
+ 2 Get all migrations into your app by running in your ipp directory
14
+ '''ruby
15
+ rake mercator_mesonic:install:migrations
16
+ '''
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'MercatorMesonic'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ module MercatorMesonic
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module MercatorMesonic
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,27 @@
1
+ module MercatorMesonic
2
+ class AktMandant < Base
3
+
4
+ self.table_name = "AktMandant"
5
+ self.primary_key = "mesocomp"
6
+
7
+ # --- Class Methods --- #
8
+
9
+ def self.mesocomp
10
+ self.first.mesocomp
11
+ end
12
+
13
+ def self.mesoyear
14
+ self.first.mesoyear
15
+ end
16
+
17
+ def self.mesocomp_and_year
18
+ [self.first.mesocomp, self.first.mesoyear]
19
+ end
20
+
21
+ # --- Instance Methods --- #
22
+
23
+ def readonly? # prevents unintentional changes
24
+ true
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ module MercatorMesonic
2
+ class Base < ActiveRecord::Base
3
+
4
+ establish_connection :mesonic_cwldaten_development
5
+ self.abstract_class = true
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ module MercatorMesonic
2
+ class Belegart < Base
3
+
4
+ self.table_name = "T357"
5
+ self.primary_key = "C000"
6
+
7
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
8
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
9
+ default_scope { mesocomp.mesoyear }
10
+
11
+ # --- Instance Methods --- #
12
+
13
+ def readonly? # prevents unintentional changes
14
+ true
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,60 @@
1
+ module MercatorMesonic
2
+ class KontakteStamm < Base
3
+
4
+ self.table_name = "T045"
5
+ self.primary_key = "mesoprim"
6
+
7
+ attr_accessible :c039, :id, :c000, :c025, :c033, :c035, :c040, :c042, :c043, :c054,
8
+ :c059, :c060, :C061, :mesocomp, :mesoyear, :mesoprim
9
+
10
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
11
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
12
+ default_scope { mesocomp.mesoyear }
13
+
14
+ scope :by_email, ->(email) { where(c025: email) }
15
+
16
+ alias_attribute :email,:c025
17
+ alias_attribute :kontonummer, :c039
18
+ alias_attribute :account_number ,:c039
19
+ alias_attribute :uid_number, :c038
20
+
21
+ belongs_to :kontenstamm, :class_name => "Kontenstamm", :foreign_key => 'c039'
22
+ belongs_to :kontenstamm_adresse, :class_name => "KontenstammAdresse", :foreign_key => 'c039'
23
+ belongs_to :kontenstamm_fakt, :class_name => "KontenstammFakt", :foreign_key => 'c039'
24
+ belongs_to :kontenstamm_fibu, :class_name => "KontenstammFibu", :foreign_key => "c039"
25
+
26
+ delegate :kunde?, :interessent?, to: :kontenstamm
27
+ delegate :telephone, :fax, :uid_number, to: :kontenstamm_adresse
28
+
29
+ # --- Class Methods --- #
30
+
31
+ def self.next_kontaktenummer
32
+ last_kontaktenummer = self.select(:c000).order(c000: :desc).limit(1).first.c000.to_i
33
+ while kontaktenummer_exists?( last_kontaktenummer )
34
+ last_kontaktenummer += 1
35
+ end
36
+ last_kontaktenummer
37
+ end
38
+
39
+ def self.kontaktenummer_exists?(n)
40
+ self.where(c000: n).any?
41
+ end
42
+
43
+ def self.initialize_mesonic(user: nil, kontonummer: nil, kontaktenummer: nil)
44
+ self.new(c033: 0, c035: 0, c040: 1, c042: 0, c043: 0, c054: 0, c059: 0, c060: 0,
45
+ c039: kontonummer,
46
+ id: kontaktenummer,
47
+ c000: kontaktenummer,
48
+ c025: user.email_address.to_s,
49
+ C061: kontaktenummer,
50
+ mesocomp: AktMandant.mesocomp,
51
+ mesoyear: AktMandant.mesoyear,
52
+ mesoprim: kontaktenummer.to_s + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear.to_s)
53
+ end
54
+
55
+ # --- Instance Methods --- #
56
+ def full_name
57
+ self.c001 + "-" + self.c002
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,63 @@
1
+ module MercatorMesonic
2
+ class Kontenstamm < Base
3
+
4
+ self.table_name = "T055"
5
+ self.primary_key = "mesoprim"
6
+
7
+ attr_accessible :c002, :c004, :c003, :c084, :c086, :c102, :c103, :c127, :c069, :c146, :c155, :c156, :c172,
8
+ :C253, :C254, :mesosafe, :mesocomp, :mesoyear, :mesoprim
9
+
10
+ alias_attribute :name, :c003
11
+ alias_attribute :firma, :name
12
+ alias_attribute :kontonummer, :c002
13
+
14
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
15
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
16
+ default_scope { mesocomp.mesoyear }
17
+
18
+ scope :interessenten, -> { where("[T055].[mesoprim] LIKE ?", "1I%").select(:c002).order(c002: :desc).limit(1) }
19
+ scope :interessent, -> { where("[T055].[mesoprim] LIKE ?", "1I%") }
20
+
21
+ has_one :kontenstamm_adresse, :class_name => "KontenstammAdresse", :foreign_key => "C001", :primary_key => "c002"
22
+
23
+ # --- Class Methods --- #
24
+
25
+ def self.next_kontonummer
26
+ last_kontonummer = self.interessenten.first.c002.split("I").last.to_i
27
+ while kontonummer_exists?( "1I#{last_kontonummer}" )
28
+ last_kontonummer += 1
29
+ end
30
+ "1I#{last_kontonummer}"
31
+ end
32
+
33
+ def self.kontonummer_exists?( k )
34
+ self.where(c002: k).any?
35
+ end
36
+
37
+ def self.initialize_mesonic(user: nil, kontonummer: nil, timestamp: nil)
38
+ self.new(c146: 0, c155: 0, c156: 0, c172: 0, C253: 0, C254: 0, mesosafe: 0,
39
+ c002: kontonummer,
40
+ c004: "4",
41
+ c003: user.name,
42
+ c084: "",
43
+ c086: timestamp,
44
+ c102: kontonummer,
45
+ c103: kontonummer,
46
+ c127: "050-",
47
+ c069: 2, ## KZ Änderungen durchgeführt ????
48
+ mesocomp: AktMandant.mesocomp,
49
+ mesoyear: AktMandant.mesoyear,
50
+ mesoprim: kontonummer.to_s + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear.to_s)
51
+ end
52
+
53
+ # --- Instance Methods --- #
54
+
55
+ def kunde?
56
+ self.c004.to_i == 2 # 2... Kunde, 4 ... Interessent
57
+ end
58
+
59
+ def interessent?
60
+ !self.kunde?
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,66 @@
1
+ module MercatorMesonic
2
+ class KontenstammAdresse < Base
3
+
4
+ self.table_name = "T051"
5
+ self.primary_key = "mesoprim"
6
+
7
+ attr_accessible :firstname, :lastname, :c001, :c116, :c157, :c180, :c181, :c182, :C241, :c050,
8
+ :c051, :c052, :c123, :mesocomp, :mesoyear, :mesoprim
9
+
10
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
11
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
12
+ default_scope { mesocomp.mesoyear }
13
+
14
+ alias_attribute :street, :c050
15
+ alias_attribute :city, :c052
16
+ alias_attribute :to_hand, :c053
17
+ alias_attribute :postal, :c051
18
+ alias_attribute :land, :c123
19
+ alias_attribute :firstname, :c180
20
+ alias_attribute :lastname, :c181
21
+ alias_attribute :tel_land, :c140
22
+ alias_attribute :tel_city, :c141
23
+ alias_attribute :telephone, :c019
24
+ alias_attribute :fax, :c020
25
+ alias_attribute :email, :c116
26
+ alias_attribute :web , :c128
27
+
28
+ attr_accessor :name
29
+
30
+ validates_presence_of :name, :on => :create
31
+ validates_presence_of :street
32
+ validates_presence_of :city
33
+ validates_presence_of :postal
34
+
35
+ # --- Instance Methods --- #
36
+
37
+ def full_name
38
+ [ self.firstname, self.lastname ].join(" ")
39
+ end
40
+
41
+ def telephone_full
42
+ [ self.tel_land, self.tel_city, self.telephone ].join(" ")
43
+ end
44
+
45
+ def fax_full
46
+ [ self.tel_land, self.tel_city, self.fax ].join(" ")
47
+ end
48
+
49
+ #--- Class Methods --- #
50
+
51
+ def self.initialize_mesonic(billing_address: nil, kontonummer: nil)
52
+ self.new(c157: 0, c182: 0, C241: 0,
53
+ c050: billing_address.street,
54
+ c051: billing_address.postalcode,
55
+ c052: billing_address.city,
56
+ c123: billing_address.country,
57
+ c180: billing_address.name.split(/\s/).first,
58
+ c181: billing_address.name.split(/\s/).last,
59
+ c001: kontonummer,
60
+ c116: billing_address.email_address.to_s,
61
+ mesocomp: AktMandant.mesocomp,
62
+ mesoyear: AktMandant.mesoyear,
63
+ mesoprim: kontonummer.to_s + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear.to_s)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,35 @@
1
+ module MercatorMesonic
2
+ class KontenstammFakt < Base
3
+
4
+ self.table_name = "T054"
5
+ self.primary_key = "mesoprim"
6
+
7
+ attr_accessible :c060, :c062, :c066, :c065, :c068, :c070, :c071, :c072, :c077, :c107, :c108, :c109, :c110, :c111, :c112, :c113, :c120,
8
+ :c121, :c132, :c133, :c134, :c148, :c149, :c150, :c171, :c183, :C184, :mesocomp, :mesoyear, :mesoprim
9
+
10
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
11
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
12
+ default_scope { mesocomp.mesoyear }
13
+
14
+ scope :by_kontonummer, ->(account_number) { where(c112: account_number) }
15
+
16
+ has_one :belegart, :class_name => "Belegart", :foreign_key => "c030", :primary_key => "c077"
17
+ has_many :zahlungsarten, :class_name => "Zahlungsart", :foreign_key => "c000", :primary_key => "c077"
18
+
19
+ # --- Class Methods --- #
20
+
21
+ def self.initialize_mesonic(kontonummer: nil)
22
+ self.new(c060: 0, c062: 0, c068: 0, c070: 0, c071: 0, c072: 0, c108: 0, c109: 0, c110: 0, c111: 0,
23
+ c113: 0, c120: "0", c132: 0, c133: 0, c134: 0, c148: 0, c149: 0, c150: 0, c171: 0, c183: 0,
24
+ C184: 0,
25
+ c065: 99,
26
+ c066: 3,
27
+ c077: "21",
28
+ c107: "017",
29
+ c112: kontonummer,
30
+ mesocomp: AktMandant.mesocomp,
31
+ mesoyear: AktMandant.mesoyear,
32
+ mesoprim: kontonummer.to_s + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear.to_s)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,37 @@
1
+ module MercatorMesonic
2
+ class KontenstammFibu < Base
3
+
4
+ self.table_name = "T058"
5
+ self.primary_key = "mesoprim"
6
+
7
+ attr_accessible :c005, :c012, :c007, :c008, :c100, :c104, :c009, :c163, :c174, :C185, :c153, :c164, :c175,
8
+ :c176, :C186, :c067, :C189, :c058, :c124, :c135, :C190, :c057, :c059, :c114, :c136, :c115,
9
+ :c137, :c006, :c061, :c063, :c151, :c173, :c177, :mesocomp, :mesoyear, :mesoprim
10
+
11
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
12
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
13
+ default_scope { mesocomp.mesoyear }
14
+
15
+ alias_attribute :bkz1, :c007
16
+ alias_attribute :bkz2, :c008
17
+ alias_attribute :zahlungskondition_fibu, :c100
18
+ alias_attribute :kontonummer, :c104
19
+
20
+ # --- Class Methods --- #
21
+
22
+ def self.initialize_mesonic(kontonummer: nil)
23
+ self.new(c005: 0, c006: 0, c009: 0, c012: 0, c057: 0, c058: 0, c059: 0, c061: 0, c063: 0, c067: 0,
24
+ c114: 0, c115: 0, c124: 0, c135: 0, c136: 0, c137: 0, c151: 0, c153: 0, c164: 0, c173: 0,
25
+ c174: 0, c175: 0, c176: 0, C185: 0, C186: 0, C189: 0, C190: 0,
26
+ c007: "1300",
27
+ c008: "1300",
28
+ c100: "017",
29
+ c104: kontonummer,
30
+ c177: kontonummer,
31
+ c163: -1,
32
+ mesocomp: AktMandant.mesocomp,
33
+ mesoyear: AktMandant.mesoyear,
34
+ mesoprim: kontonummer.to_s + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear.to_s)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,131 @@
1
+ module MercatorMesonic
2
+ class Order < Base
3
+
4
+ self.table_name = "t025"
5
+ self.primary_key = "C000"
6
+
7
+ scope :mesoyear, -> { where(mesoyear: AktMandant.mesoyear) }
8
+ scope :mesocomp, -> { where(mesocomp: AktMandant.mesocomp) }
9
+ default_scope { mesocomp.mesoyear }
10
+
11
+ # --- Class Methods --- #
12
+
13
+ def self.initialize_mesonic(order: nil, custom_order_number: nil)
14
+
15
+ customer = order.customer
16
+ timestamp = Time.now
17
+ mesonic_kontenstamm_fakt = customer.mesonic_kontenstamm_fakt
18
+ custom_order_number |= timestamp.strftime('%y%m%d%H%M%S') + timestamp.usec # timestamp, if custom order number not provided
19
+ kontonummer = @customer.mesonic_kontenstamm.try(:kunde?) ? @customer.mesonic_kontenstamm.kontonummer : "09WEB"
20
+ usernummer = customer.erp_contact_nr ? customer.erp_contact_nr : customer.id
21
+ billing_method = order.billing_method.to_i == 1004 ?
22
+ mesonic_kontenstamm_fakt.c107 : IvellioVellin::Order.payment_methods2[ :"#{order.billing_method}" ].try(:to_i) #HAS 20140325 FIXME
23
+
24
+ self.new(c000: kontonummer + "-" + custom_order_number,
25
+ c004: order.billing_name,
26
+ c005: order.billing_detail,
27
+ c006: order.billing_street,
28
+ c007: order.billing_postalcode,
29
+ c008: order.billing_city,
30
+ c010: order.shipping_name,
31
+ c011: order.shipping_detail,
32
+ c012: order.shipping_street,
33
+ c013: order.shipping_postal,
34
+ c014: order.shipping_postalcode,
35
+ c017: order.billing_state_code,
36
+ c019: order.shipping_state_code,
37
+ c020: usernummer,
38
+ c021: kontonummer,
39
+ c022: custom_order_number,
40
+ c023: "N", # druckstatus angebot
41
+ c024: "N", # druckstatus auftragsbestätigung
42
+ c025: "N", # durckstatus lieferschein
43
+ c026: "N", # druckstatus faktura
44
+ c027: timestamp, # datum angebot
45
+ c030: customer.erp_account_nr, #### konto-lieferadresse
46
+ c034: mesonic_kontenstamm_fakt.belegart.c014, # #### belegart
47
+ c035: mesonic_kontenstamm_fakt.c077, # belegart
48
+ c036: mesonic_kontenstamm_fakt.c065, # vertreternummer
49
+ c037: 0, # nettotage
50
+ c038: 0, # skonto%1
51
+ c039: 0, # skontotage1
52
+ c040: 0, # summenrabatt
53
+ c041: 0, # fw-zeile
54
+ c047: mesonic_kontenstamm_fakt.c066, # preisliste
55
+ c049: 0, # fw einheit
56
+ c050: 0, # fw-faktor
57
+ c051: billing_method
58
+ c053: mesonic_kontenstamm_fakt.c122, # kostentraeger
59
+ c054: 400, # kostenstelle
60
+ c056: 0, # skonto%2
61
+ c057: 0, # skontotage2
62
+ c059: timestamp, # datum d. erstanlage
63
+ c074: 0, # kennzeichen f FW-Umrechung
64
+ c075: 0, # flag für Webinterface
65
+ c076: 0, # Dokumenten ID
66
+ c077: 0, # FW-Notierungsflag
67
+ c078: 0, # xml-erweiterung
68
+ c080: 0, # filler
69
+ c081: nil, #HAS 20140325 FIXME: order.billing_name2 Adresse erweitern
70
+ c082: nil, #HAS 20140325 FIXME: order.shipping_name2 Adresse erweitern
71
+ c086: 0, # teilliefersperre
72
+ c088: 0, # priorität
73
+ c089: order.shipping_method.to_i #HAS 20140325 FIXME
74
+ c090: 0, # freier text 2
75
+ c091: 0, # freier text 3
76
+ c092: 0, # freier text 4
77
+ c093: 0, # sammelrechnung
78
+ c094: 0, # methode
79
+ c095: 0, # ausprägung 1
80
+ c096: 0, # ausprägung 2
81
+ c097: order.billing_method.to_i #HAS 20140325 FIXME
82
+ c098: 101, # freigabekontrolle angebot
83
+ c099: order.sum_incl_vat, # kumulierter zahlungsbetrag
84
+ c100: order.sum_incl_vat, # endbetrag
85
+ c102: 0, # rohertrag
86
+ c103: timestamp + 3.days, #
87
+ c104: 0, # ansprechpartner rechnungsadresse
88
+ c105: 0, # ansprechpartner lieferadresse
89
+ c106: 0, # fremdwährungskurs
90
+ c109: -1, # kontrakttyp
91
+ c111: 2, # exim durchgeführte änderungen
92
+ c113: c021, # c113: "09WEB" # konto rechnungsadresse
93
+ c114: 0, # anzahlungsbetrag
94
+ c115: 101, # freigabekontrolle auftrag
95
+ c116: 101, # freigabekontrolle lieferschein
96
+ c117: 101, # freigabekontrolle faktura
97
+ c118: 0, # euro rohertrag
98
+ c120: 0, # fw-einheit für storno
99
+ c121: 0, # sortierung
100
+ c123: 0, # textkennzeichen konto
101
+ c126: 0, # aktionsplanzeile
102
+ c127: 0, # karenztage
103
+ c137: 2,
104
+ c139: 0,
105
+ c140: 0,
106
+ c141: 0,
107
+ c142: 0,
108
+ c143: 0,
109
+ C151: 8,
110
+ C152: "900001",
111
+ C153: 0,
112
+ C154: 0,
113
+ C155: 0,
114
+ C156: 0,
115
+ C157: 0,
116
+ C158: 0,
117
+ C159: 0,
118
+ C160: 0,
119
+ mesocomp: AktMandant.mesocomp,
120
+ mesoyear: AktMandant.mesoyear,
121
+ mesoprim: c000 + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear )
122
+ end
123
+ end
124
+
125
+ # --- Instance Methods --- #
126
+
127
+ def readonly? # prevents unintentional changes
128
+ true
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,101 @@
1
+ module MercatorMesonic
2
+ class OrderItem < Base
3
+
4
+ self.table_name = "T026"
5
+ self.primary_key = "c000"
6
+
7
+ belongs_to :inventory, :foreign_key => "C003"
8
+
9
+ attr_accessor :cart_item
10
+ attr_accessor :mesonic_order
11
+
12
+ # --- Class Methods --- #
13
+
14
+ def self.initialize_mesonic(mesonic_order: nil, lineitem: nil, customer: nil, index: nil)
15
+ id = mesonic_order.C000 + "-" + "%06d" % (index + 1 )
16
+ self.new(c000: id,
17
+ c003: lineitem.inventory.article_number,
18
+ c004: lineitem.inventory.Bezeichnung,
19
+ c005: lineitem.menge, # menge bestellt
20
+ c006: lineitem.menge, # menge geliefert
21
+ c007: lineitem.einzelpreis, # einzelpreis
22
+ c008: 0, # zeilenrabatt 1 und 2
23
+ c009: 4002, # erlöskonto
24
+ c010: lineitem.inventory.Steuersatzzeile, # umsatzsteuer prozentsatz #FIXME
25
+ c011: 1, # statistikkennzeichen
26
+ c012: lineitem.inventory.ArtGruppe, # artikelgruppe #FIXME
27
+ c013: 0, # liefertage
28
+ c014: lineitem.inventory.Provisionscode, # provisionscode #FIXME
29
+ c015: nil, # colli
30
+ c016: 0, # menge bereits geliefert
31
+ c018: 0, # faktor 1 nach formeleingabe
32
+ c019: 0, # faktor 2 nach formeleingabe
33
+ c020: 0, # faktor 3 nach formeleingabe
34
+ c021: 0, # zeilenrabatt %1
35
+ c022: 0, # zeilenrabatt %2
36
+ c023: 0, # einstandspreis
37
+ c024: nil, # umstatzsteuercode
38
+ c025: mesonic_order.c027, # lieferdatum
39
+ c026: 400, # kostenstelle
40
+ c027: 0, # lieferwoche
41
+ c031: lineitem.gesamtwert, # gesamtwert #FIXME
42
+ c032: 0, # positionslevel
43
+ c033: nil, # positionsnummer text
44
+ c034: lineitem.inventory.Gewicht, # gewicht #FIXME
45
+ c035: 0, # einstandspreis KZ
46
+ c042: 1, # datentyp
47
+ c044: mesonic_order.c021, # kontonummer
48
+ c045: mesonic_order.c022, # laufnummer
49
+ c046: 99, # vertreternummer
50
+ c047: nil, # prodflag
51
+ c048: mesonic_order.c027.year, # lieferjahr
52
+ c052: 0, # stat. wert
53
+ c054: 0, # bewertungspreis editieren
54
+ c055: lineitem.inventory.Auspraegungsflag, #FIXME
55
+ c056: customer.erp_account_nr, # interessentenkontonummer
56
+ c057: 0, # lagerbestand ändern J/N
57
+ c058: 0, # key für dispozeile
58
+ c059: 0, # zeilennummer d kundenauftrags
59
+ c060: 0, # temp gridzeilennumer
60
+ c061: 0, # zeilennummer des auftrages
61
+ c062: 0, # key handels stückliste
62
+ c063: 0, # flag für update ( telesales )
63
+ c068: 1, # lieferantenartikelnummer
64
+ c070: 0, # colli faktor
65
+ c071: 0, # umrechnungsfaktor colli
66
+ c072: 0, # umrechnungsfaktor menge 2
67
+ c073: 1, # preisartenflag
68
+ c074: 0, # flag für aufgeteilte hauptartikel
69
+ c075: 0, # flag v lieferantenlieferung aufteilen
70
+ c077: 0, # preisupdateflag
71
+ c078: index + 1, # zeilennummer (intern)
72
+ c081: 0, # nummer des kontraktpreises
73
+ c082: 0, # menge 2
74
+ c083: lineitem.inventory.Steuersatzzeile * 10, #FIXME
75
+ c085: 2, # exim durchgeführt änderungen
76
+ c086: 0, # EURO einstandspreis
77
+ c087: 0, # bnk-prozent
78
+ c088: 0, # ausgebuchte menge
79
+ c091: 0, # textkennzeichen artikel
80
+ c092: 0, # betrag bezugskosten
81
+ c098: 0, # flag reservierung
82
+ c099: 0, # rückstandsmenge
83
+ c100: 0,
84
+ c101: 0,
85
+ c104: 0,
86
+ mesocomp: AktMandant.mesocomp,
87
+ mesoyear: AktMandant.mesoyear,
88
+ mesoprim: id + "-" + AktMandant.mesocomp + "-" + AktMandant.mesoyear,
89
+ C106: "",
90
+ C107: 0,
91
+ C108: "",
92
+ C109: 0 )
93
+ end
94
+
95
+ # --- Instance Methods --- #
96
+
97
+ def readonly? # prevents unintentional changes
98
+ true
99
+ end
100
+ end
101
+ end