comee_core 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/comee/core/access_controller.rb +33 -0
  6. data/app/controllers/comee/core/application_controller.rb +43 -0
  7. data/app/controllers/comee/core/currencies_controller.rb +13 -0
  8. data/app/controllers/comee/core/notifications_controller.rb +38 -0
  9. data/app/controllers/comee/core/product_types_controller.rb +18 -0
  10. data/app/controllers/comee/core/products_controller.rb +13 -0
  11. data/app/controllers/comee/core/suppliers_controller.rb +13 -0
  12. data/app/controllers/comee/core/units_controller.rb +13 -0
  13. data/app/controllers/comee/core/users_controller.rb +13 -0
  14. data/app/controllers/concerns/comee/core/common.rb +73 -0
  15. data/app/jobs/comee_core/application_job.rb +4 -0
  16. data/app/mailers/comee/core/application_mailer.rb +8 -0
  17. data/app/mailers/comee/core/supplier_mailer.rb +18 -0
  18. data/app/models/comee/core/application_record.rb +7 -0
  19. data/app/models/comee/core/back_order.rb +33 -0
  20. data/app/models/comee/core/back_order_item.rb +16 -0
  21. data/app/models/comee/core/client.rb +10 -0
  22. data/app/models/comee/core/client_order.rb +23 -0
  23. data/app/models/comee/core/client_order_item.rb +10 -0
  24. data/app/models/comee/core/client_price.rb +20 -0
  25. data/app/models/comee/core/currency.rb +8 -0
  26. data/app/models/comee/core/invoice.rb +23 -0
  27. data/app/models/comee/core/invoice_item.rb +18 -0
  28. data/app/models/comee/core/master_price.rb +35 -0
  29. data/app/models/comee/core/notification.rb +17 -0
  30. data/app/models/comee/core/product.rb +47 -0
  31. data/app/models/comee/core/product_lookup.rb +10 -0
  32. data/app/models/comee/core/product_type.rb +19 -0
  33. data/app/models/comee/core/supplier.rb +10 -0
  34. data/app/models/comee/core/unit.rb +10 -0
  35. data/app/models/comee/core/user.rb +13 -0
  36. data/app/notifications/comee/core/new_order_notification.rb +23 -0
  37. data/app/serializers/comee/core/currency_serializer.rb +7 -0
  38. data/app/serializers/comee/core/product_serializer.rb +8 -0
  39. data/app/serializers/comee/core/product_type_serializer.rb +7 -0
  40. data/app/serializers/comee/core/supplier_serializer.rb +7 -0
  41. data/app/serializers/comee/core/unit_serializer.rb +7 -0
  42. data/app/serializers/comee/core/user_serializer.rb +7 -0
  43. data/app/services/comee/core/product_lookup_service.rb +38 -0
  44. data/app/services/comee/core/token_service.rb +13 -0
  45. data/app/utils/comee/core/period.rb +35 -0
  46. data/app/views/comee/core/supplier_mailer/new_order_notification.html.erb +8 -0
  47. data/app/views/layouts/comee/core/mailer.html.erb +13 -0
  48. data/app/views/layouts/comee/core/mailer.text.erb +1 -0
  49. data/config/locales/de.yml +13 -0
  50. data/config/locales/en.yml +13 -0
  51. data/config/routes.rb +21 -0
  52. data/config/spring.rb +1 -0
  53. data/db/migrate/20230727153013_create_comee_core_units.rb +12 -0
  54. data/db/migrate/20230728011037_create_comee_core_currencies.rb +11 -0
  55. data/db/migrate/20230728012836_create_comee_core_product_types.rb +13 -0
  56. data/db/migrate/20230728014322_create_comee_core_products.rb +21 -0
  57. data/db/migrate/20230728014330_create_comee_core_users.rb +14 -0
  58. data/db/migrate/20230728122618_create_comee_core_suppliers.rb +17 -0
  59. data/db/migrate/20230728123039_create_comee_core_clients.rb +18 -0
  60. data/db/migrate/20230728123928_create_comee_core_back_orders.rb +20 -0
  61. data/db/migrate/20230728125723_create_comee_core_back_order_items.rb +22 -0
  62. data/db/migrate/20230730061225_create_comee_core_notifications.rb +13 -0
  63. data/db/migrate/20230812190652_create_comee_core_client_orders.rb +24 -0
  64. data/db/migrate/20230812212844_create_comee_core_client_order_items.rb +18 -0
  65. data/db/migrate/20230813235946_create_comee_core_master_prices.rb +26 -0
  66. data/db/migrate/20230814151601_create_comee_core_client_prices.rb +23 -0
  67. data/db/migrate/20230914041307_create_comee_core_external_products.rb +18 -0
  68. data/db/migrate/20230915205522_create_comee_core_invoices.rb +24 -0
  69. data/db/migrate/20230915205648_create_comee_core_invoice_items.rb +19 -0
  70. data/lib/comee/core/engine.rb +24 -0
  71. data/lib/comee/core/version.rb +5 -0
  72. data/lib/comee/core.rb +4 -0
  73. data/lib/comee_core.rb +6 -0
  74. data/lib/tasks/comee_core_tasks.rake +4 -0
  75. data/spec/factories/comee/core/back_order_items.rb +11 -0
  76. data/spec/factories/comee/core/back_orders.rb +13 -0
  77. data/spec/factories/comee/core/client_order_items.rb +8 -0
  78. data/spec/factories/comee/core/client_orders.rb +13 -0
  79. data/spec/factories/comee/core/client_prices.rb +12 -0
  80. data/spec/factories/comee/core/clients.rb +9 -0
  81. data/spec/factories/comee/core/currencies.rb +6 -0
  82. data/spec/factories/comee/core/invoice_items.rb +9 -0
  83. data/spec/factories/comee/core/invoices.rb +16 -0
  84. data/spec/factories/comee/core/master_prices.rb +15 -0
  85. data/spec/factories/comee/core/notifications.rb +8 -0
  86. data/spec/factories/comee/core/product_lookups.rb +7 -0
  87. data/spec/factories/comee/core/product_types.rb +8 -0
  88. data/spec/factories/comee/core/products.rb +10 -0
  89. data/spec/factories/comee/core/suppliers.rb +9 -0
  90. data/spec/factories/comee/core/units.rb +7 -0
  91. data/spec/factories/comee/core/users.rb +9 -0
  92. metadata +346 -0
@@ -0,0 +1,10 @@
1
+ module Comee
2
+ module Core
3
+ class ProductLookup < ApplicationRecord
4
+ belongs_to :product
5
+ belongs_to :itemable, polymorphic: true
6
+
7
+ validates :code, presence: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ module Comee
2
+ module Core
3
+ class ProductType < ApplicationRecord
4
+ validates :code, presence: true, uniqueness: true
5
+ validates :name, presence: true
6
+ validate :required_fields_must_be_in_properties
7
+
8
+ def required_fields_must_be_in_properties
9
+ return unless metadata_schema.present?
10
+
11
+ diff = metadata_schema["required"] - metadata_schema["properties"].keys
12
+ return unless diff.count.positive?
13
+
14
+ error = "The following fields are mentioned as required but do not exist in the field list: #{diff}."
15
+ errors.add(:base, error)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ module Comee
2
+ module Core
3
+ class Supplier < ApplicationRecord
4
+ belongs_to :user, optional: true
5
+
6
+ validates :code, presence: true, uniqueness: true
7
+ validates :name, :address, :locale, presence: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Comee
2
+ module Core
3
+ class Unit < ApplicationRecord
4
+ enum :unit_type, {weight: 0, volume: 1, item: 2}
5
+
6
+ validates :code, presence: true, uniqueness: true
7
+ validates :name, presence: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Comee
2
+ module Core
3
+ class User < ApplicationRecord
4
+ enum :user_type, {supplier: 0, admin: 1}
5
+
6
+ has_secure_password
7
+ has_many :notifications, as: :recipient, dependent: :destroy
8
+
9
+ validates :name, :email, :user_type, presence: true
10
+ validates :email, uniqueness: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Comee
2
+ module Core
3
+ class NewOrderNotification < Noticed::Base
4
+ deliver_by :database
5
+ deliver_by :email, mailer: "Comee::Core::SupplierMailer", method: :new_order_notification
6
+
7
+ param :back_order
8
+
9
+ def message
10
+ back_order = params[:back_order]
11
+ title = "New Order Notification"
12
+ date = Date.current
13
+ content = <<~CONTENT
14
+ A new purchase order with the following details has been sent to you:
15
+ order number: #{back_order.order_number}
16
+ order date: #{back_order.order_date}
17
+ delivery date: #{back_order.delivery_date}
18
+ CONTENT
19
+ {title:, date:, content:}
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module Comee
2
+ module Core
3
+ class CurrencySerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Comee
2
+ module Core
3
+ class ProductSerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name, :description, :product_type_id, :metadata, :unit_code, :unit_name,
5
+ :product_type_code, :product_type_name
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module Comee
2
+ module Core
3
+ class ProductTypeSerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name, :description, :metadata_schema
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Comee
2
+ module Core
3
+ class SupplierSerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name, :address, :locale
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Comee
2
+ module Core
3
+ class UnitSerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name, :unit_type
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Comee
2
+ module Core
3
+ class UserSerializer < ActiveModel::Serializer
4
+ attributes :id, :name, :email, :user_type
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,38 @@
1
+ module Comee
2
+ module Core
3
+ class ProductLookupService
4
+ ORGANIZATION = "ORG".freeze
5
+ ##
6
+ # This method returns a translated code for a given +code+. The +code+ can be
7
+ # for a supplier or a client. The source of the +code+ is described using the +from+
8
+ # parameter. The +from+ parameter is a has which specifies the id of the source
9
+ # supplier/client as `itemable_id`, and the data type of the source as itemable_type.
10
+ # We specify the id and type because the ProductLookup model has a polymorphic relationship
11
+ # with supplier and client.
12
+ #
13
+ # The +to+ parameter uses a similar format to specify the target supplier/client we want to
14
+ # conduct the lookup for.
15
+ def lookup_product(code, from, to)
16
+ error = "The 'from' parameter cannot be assigned any string other than '#{ORGANIZATION}'."
17
+ raise(StandardError, error) if from.instance_of?(String) && from != ORGANIZATION
18
+
19
+ error = "The 'to' parameter cannot be assigned any string other than '#{ORGANIZATION}'."
20
+ raise(StandardError, error) if to.instance_of?(String) && to != ORGANIZATION
21
+
22
+ if from == ORGANIZATION
23
+ query = ProductLookup.joins(:product).find_by(product: {code:}, **to)
24
+ return query.code
25
+ end
26
+
27
+ if to == ORGANIZATION
28
+ product = ProductLookup.find_by(code: code, **from).product
29
+ return product.code
30
+ end
31
+
32
+ product = ProductLookup.find_by(code: code, **from).product
33
+ query = ProductLookup.find_by(product: product, **to)
34
+ query.code
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ module Comee
2
+ module Core
3
+ class TokenService
4
+ def self.issue(payload)
5
+ JWT.encode(payload, ENV["SECRET_KEY"], "HS256")
6
+ end
7
+
8
+ def self.decode(token)
9
+ JWT.decode(token, ENV["SECRET_KEY"], true, algorithm: "HS256").first
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,35 @@
1
+ module Comee
2
+ module Core
3
+ class Period
4
+ attr_accessor :start, :finish
5
+ def initialize(start, finish)
6
+ @start = start
7
+ @finish = finish
8
+ end
9
+
10
+ def valid?
11
+ finish > start
12
+ end
13
+
14
+ def contains?(period)
15
+ return true if start <= period.start && finish >= period.finish
16
+
17
+ false
18
+ end
19
+
20
+ def contained_by?(period)
21
+ return true if start >= period.start && finish <= period.finish
22
+
23
+ false
24
+ end
25
+
26
+ def overlaps?(period)
27
+ return true if period.start <= start && start <= period.finish
28
+
29
+ return true if start <= period.start && period.start <= finish
30
+
31
+ false
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ <p><%= t(".greeting") %></p>
2
+ <p><%= t(".entry", link: "http://localhost:4200/order-management/confirmation/#{@back_order.id}", order_number: @back_order.order_number) %><p>
3
+ <p><%= t(".feedback", next_day: Date.current.advance(days: 1)) %>
4
+ </p><%= t(".delivery", delivery_address: @back_order.delivery_address) %>
5
+ <p><%= t(".invoice", invoice_address: @back_order.invoice_address) %></p>
6
+ <p><%= t(".telephone") %></p>
7
+ <p><%= t(".thanks") %></p>
8
+ <p><%= t(".closing") %></p>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <style>
6
+ /* Email styles need to be inline */
7
+ </style>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,13 @@
1
+ de:
2
+ comee:
3
+ core:
4
+ supplier_mailer:
5
+ new_order_notification:
6
+ greeting: "Sehr geehrte Damen und Herren,"
7
+ entry: "Bitte besuchen Sie den %{link}, um unser '%{order_number}' zu finden."
8
+ feedback: "Wir bitten um Rückmeldung bis zum %{next_day} (the next day)."
9
+ delivery: "Die Warenannahme findet an der Adresse %{delivery_address} statt und erfolgt von Montag bis Freitag im Zeitraum von 07:00 – 16:00 Uhr."
10
+ invoice: "Die Büro-/Rechnungsadresse lautet %{invoice_address}."
11
+ telephone: "Unsere neue Telefon-Nr. lautet +49 (0) 40-98256170"
12
+ thanks: "Vielen Dank im Voraus."
13
+ closing: "Beste Grüße"
@@ -0,0 +1,13 @@
1
+ en:
2
+ comee:
3
+ core:
4
+ supplier_mailer:
5
+ new_order_notification:
6
+ greeting: "Dear Ladies and Gentlemen,"
7
+ entry: "Please visit %{link} to find our '%{order_number}'."
8
+ feedback: "We kindly ask for feedback by %{next_day} (the next day)."
9
+ delivery: "Please take note that the goods receipt will take place at the address %{delivery_address} from Monday to Friday in the time frame from 07:00 - 16:00 o'clock."
10
+ invoice: "The office billing address is %{invoice_address}."
11
+ telephone: "Our new telephone number is: +49 (0) 40-98256170"
12
+ thanks: "Thank you in advance."
13
+ closing: "Best regards"
data/config/routes.rb ADDED
@@ -0,0 +1,21 @@
1
+ Comee::Core::Engine.routes.draw do
2
+ post "/login", controller: :access, action: :login
3
+ get "/notifications/unread", controller: :notifications, action: :unread
4
+ get "/notifications/read", controller: :notifications, action: :read
5
+ resources :notifications, only: [:index] do
6
+ member do
7
+ post "mark_as_read", controller: :notifications, action: :mark_as_read
8
+ post "mark_as_unread", controller: :notifications, action: :mark_as_unread
9
+ end
10
+ end
11
+ resources :suppliers
12
+ resources :products
13
+ resources :product_types do
14
+ member do
15
+ get "products", controller: :product_types, action: :products
16
+ end
17
+ end
18
+ resources :currencies
19
+ resources :units
20
+ resources :users
21
+ end
data/config/spring.rb ADDED
@@ -0,0 +1 @@
1
+ Spring.application_root = "spec/dummy"
@@ -0,0 +1,12 @@
1
+ class CreateComeeCoreUnits < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_units do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.integer :unit_type, null: false, default: 0
7
+
8
+ t.timestamps
9
+ end
10
+ add_index :comee_core_units, :code, unique: true
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ class CreateComeeCoreCurrencies < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_currencies do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ add_index :comee_core_currencies, :code, unique: true
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class CreateComeeCoreProductTypes < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_product_types do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :description
7
+ t.jsonb :metadata_schema, default: {}
8
+
9
+ t.timestamps
10
+ end
11
+ add_index :comee_core_product_types, :code, unique: true
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ class CreateComeeCoreProducts < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_products do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :description
7
+ t.jsonb :metadata
8
+ t.references :product_type,
9
+ null: false,
10
+ index: {name: "ccpt_on_ccp_indx"},
11
+ foreign_key: {to_table: :comee_core_product_types}
12
+ t.references :unit,
13
+ null: false,
14
+ index: {name: "unit_on_ccp_indx"},
15
+ foreign_key: {to_table: :comee_core_units}
16
+
17
+ t.timestamps
18
+ end
19
+ add_index :comee_core_products, :code, unique: true
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ class CreateComeeCoreUsers < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_users do |t|
4
+ t.string :name, null: false
5
+ t.string :email, null: false
6
+ t.boolean :active, null: false, default: true
7
+ t.string :password_digest
8
+ t.integer :user_type, null: false, default: 0
9
+
10
+ t.timestamps
11
+ end
12
+ add_index :comee_core_users, :email, unique: true
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ class CreateComeeCoreSuppliers < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_suppliers do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :address, null: false
7
+ t.string :locale, null: false, default: "en"
8
+ t.references :user,
9
+ null: true,
10
+ index: {name: "user_on_ccs_indx"},
11
+ foreign_key: {to_table: :comee_core_users}
12
+
13
+ t.timestamps
14
+ end
15
+ add_index :comee_core_suppliers, :code, unique: true
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ class CreateComeeCoreClients < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_clients do |t|
4
+ t.references :user,
5
+ null: false,
6
+ index: {name: "user_on_ccc_indx"},
7
+ foreign_key: {to_table: :comee_core_users}
8
+ t.string :code, null: false
9
+ t.string :name, null: false
10
+ t.string :address, null: false
11
+ t.string :locale, null: false, default: "en"
12
+ t.string :discount, null: false, default: 0
13
+
14
+ t.timestamps
15
+ end
16
+ add_index :comee_core_clients, :code, unique: true
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ class CreateComeeCoreBackOrders < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_back_orders do |t|
4
+ t.string :order_number, null: false
5
+ t.date :order_date, null: false, default: -> { "CURRENT_DATE" }
6
+ t.date :delivery_date, null: false
7
+ t.references :supplier,
8
+ null: false,
9
+ index: {name: "supplier_on_ccbo_indx"},
10
+ foreign_key: {to_table: :comee_core_suppliers}
11
+ t.json :terms, null: false, default: {freight_terms: "FOB", currency: "EURO"}
12
+ t.string :delivery_address, null: false
13
+ t.string :invoice_address, null: false
14
+ t.integer :status, null: false, default: 0
15
+ t.string :remark
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ class CreateComeeCoreBackOrderItems < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_back_order_items do |t|
4
+ t.references :back_order,
5
+ null: false,
6
+ index: {name: "bo_on_ccboi_indx"},
7
+ foreign_key: {to_table: :comee_core_back_orders}
8
+ t.references :product,
9
+ null: false,
10
+ index: {name: "product_on_ccboi_indx"},
11
+ foreign_key: {to_table: :comee_core_products}
12
+ t.float :requested_quantity, null: false
13
+ t.float :requested_unit_price, null: false
14
+ t.float :supplier_quantity, null: false
15
+ t.float :supplier_unit_price, null: false
16
+ t.integer :item_status, null: false, default: 0
17
+ t.string :remark
18
+
19
+ t.timestamps
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ class CreateComeeCoreNotifications < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_notifications do |t|
4
+ t.references :recipient, polymorphic: true, null: false
5
+ t.string :type
6
+ t.jsonb :params
7
+ t.datetime :read_at
8
+
9
+ t.timestamps
10
+ end
11
+ add_index :comee_core_notifications, :read_at
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ class CreateComeeCoreClientOrders < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_client_orders do |t|
4
+ t.string :order_number, null: false
5
+ t.date :order_date, null: false, default: -> { "CURRENT_DATE" }
6
+ t.date :delivery_date, null: false
7
+ t.references :client,
8
+ null: false,
9
+ index: {name: "client_on_ccco_indx"},
10
+ foreign_key: {to_table: :comee_core_clients}
11
+ t.json :terms
12
+ t.integer :status, null: false, default: 0
13
+ t.string :delivery_address, null: false
14
+ t.string :invoice_address, null: false
15
+ t.string :remark
16
+ t.float :total_price, null: true, default: 0
17
+ t.float :amount_paid, null: true, default: 0
18
+ t.float :amount_due, null: true, default: 0
19
+
20
+ t.timestamps
21
+ end
22
+ add_index :comee_core_client_orders, :order_number, unique: true
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ class CreateComeeCoreClientOrderItems < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_client_order_items do |t|
4
+ t.references :client_order,
5
+ null: false,
6
+ index: {name: "co_on_coi_indx"},
7
+ foreign_key: {to_table: :comee_core_client_orders}
8
+ t.references :product,
9
+ null: false,
10
+ index: {name: "po_on_coi_indx"},
11
+ foreign_key: {to_table: :comee_core_products}
12
+ t.integer :quantity, null: false
13
+ t.integer :price, null: false
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ class CreateComeeCoreMasterPrices < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_master_prices do |t|
4
+ t.date :pp_valid_from, null: false
5
+ t.date :pp_valid_to, null: false
6
+ t.date :sp_valid_from, null: false
7
+ t.date :sp_valid_to, null: false
8
+ t.float :old_pprice, null: true
9
+ t.float :new_pprice, null: false
10
+ t.float :old_sprice, null: true
11
+ t.float :new_sprice, null: false
12
+ t.boolean :primary, null: false
13
+ t.references :product,
14
+ null: false,
15
+ index: {name: "product_on_ccsp_indx"},
16
+ foreign_key: {to_table: :comee_core_products}
17
+ t.references :supplier,
18
+ null: false,
19
+ index: {name: "supplier_on_ccsp_indx"},
20
+ foreign_key: {to_table: :comee_core_suppliers}
21
+
22
+ t.timestamps
23
+ end
24
+ add_index :comee_core_master_prices, [:product_id, :supplier_id], unique: true
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ class CreateComeeCoreClientPrices < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_client_prices do |t|
4
+ t.date :valid_from, null: false
5
+ t.date :valid_to, null: false
6
+ t.float :old_price, null: true
7
+ t.float :new_price, null: false
8
+ t.float :future_price, null: true
9
+ t.date :future_validity, null: true
10
+ t.references :product,
11
+ null: false,
12
+ index: {name: "product_on_cccp_indx"},
13
+ foreign_key: {to_table: :comee_core_products}
14
+ t.references :client,
15
+ null: false,
16
+ index: {name: "client_on_cccp_indx"},
17
+ foreign_key: {to_table: :comee_core_clients}
18
+
19
+ t.timestamps
20
+ end
21
+ add_index :comee_core_client_prices, [:product_id, :client_id], unique: true
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ class CreateComeeCoreExternalProducts < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_product_lookups do |t|
4
+ t.string :code, null: false
5
+ t.references :itemable, polymorphic: true, null: false
6
+ t.references :product,
7
+ null: false,
8
+ index: {name: "product_on_ccep_indx"},
9
+ foreign_key: {to_table: :comee_core_products}
10
+
11
+ t.timestamps
12
+ end
13
+ add_index :comee_core_product_lookups,
14
+ [:itemable_id, :itemable_type, :product_id],
15
+ name: "itemable_product_indx_uniq",
16
+ unique: true
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ class CreateComeeCoreInvoices < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_invoices do |t|
4
+ t.string :invoice_no, null: false
5
+ t.references :client_order,
6
+ null: false,
7
+ index: {name: "co_on_cci_indx"},
8
+ foreign_key: {to_table: :comee_core_client_orders}
9
+ t.date :date_issued, null: false
10
+ t.string :ship_name
11
+ t.date :delivery_date
12
+ t.string :voyage_no
13
+ t.float :additional_charges
14
+ t.float :total_price
15
+ t.string :payment_term, null: false
16
+ t.integer :notifications_sent
17
+ t.integer :status, null: false, default: 0
18
+ t.integer :payment_status, null: false, default: 0
19
+
20
+ t.timestamps
21
+ end
22
+ add_index :comee_core_invoices, :invoice_no, unique: true
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ class CreateComeeCoreInvoiceItems < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :comee_core_invoice_items do |t|
4
+ t.references :client_order_item,
5
+ null: false,
6
+ index: {name: "coi_on_ccii_indx"},
7
+ foreign_key: {to_table: :comee_core_client_order_items}
8
+ t.float :quantity, null: false
9
+ t.float :unit_price, null: false
10
+ t.float :total_price, null: false
11
+ t.references :invoice,
12
+ null: false,
13
+ index: {name: "invoice_on_ccii_indx"},
14
+ foreign_key: {to_table: :comee_core_invoices}
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end