90 lines
2.4 KiB
Ruby
90 lines
2.4 KiB
Ruby
class Supplier
|
|
include SimplyStored::Couch
|
|
include Devise::Orm::SimplyStored
|
|
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable
|
|
|
|
property :name
|
|
property :open, type: :boolean, default: false
|
|
property :night_offset, type: Float
|
|
property :lat, type: Float, default: 52.08062426379751
|
|
property :lng, type: Float, default: 4.312562942504883
|
|
|
|
#WIFI
|
|
property :offer_wifi
|
|
property :wifi_ssid
|
|
property :wifi_type
|
|
property :wifi_password
|
|
|
|
#has_many :orders, through: :lists
|
|
has_many :products, dependent: :destroy
|
|
has_many :product_categories, dependent: :destroy
|
|
has_many :tables, dependent: :destroy
|
|
has_many :lists, dependent: :destroy
|
|
#has_many :lists, through: :tables
|
|
has_many :orders
|
|
has_many :sections, dependent: :destroy
|
|
|
|
after_create :add_section_on_create
|
|
|
|
view :by_email, key: :email
|
|
|
|
validates :name, presence: true
|
|
|
|
def location=(val)
|
|
lat, lng = val.strip.split(/[ ,]+/).map(&:to_f)
|
|
self.lat = lat
|
|
self.lng = lng
|
|
end
|
|
|
|
def location
|
|
[lat, lng].join(',')
|
|
end
|
|
|
|
def active_orders(options = {})
|
|
return @active_orders if @active_orders && @active_orders_options == options
|
|
@active_orders_options = options
|
|
@active_orders = options[:section_id] ? Order.active_for_supplier_and_section(self, options[:section_id]) : Order.active_for_supplier(id)
|
|
@active_orders.include_relation(list: {table: :section}, product_orders: :order)
|
|
@active_orders
|
|
end
|
|
|
|
def active_lists(options = {})
|
|
return @active_lists if @active_lists.present?
|
|
@active_lists = options[:section_id].present? ? List.active_for_supplier_and_section(self, options[:section_id]) : List.active_for_supplier(id)
|
|
@active_lists.include_relations(table: :section, orders: {product_orders: :product})
|
|
@active_lists
|
|
end
|
|
|
|
|
|
# Return the currently active tables for the supplier
|
|
def active_tables(options = {})
|
|
options[:section_id].present? ? tables.select{|t| t.section_id == options[:section_id]} : tables
|
|
end
|
|
|
|
def non_placed_tables
|
|
tables.reject{|t| t.section_id.present? }
|
|
end
|
|
|
|
def open?
|
|
open
|
|
end
|
|
def closed?
|
|
!open?
|
|
end
|
|
|
|
def mark_as_open!
|
|
self.open = true
|
|
save
|
|
end
|
|
def mark_as_closed!
|
|
self.open = false
|
|
save
|
|
end
|
|
private
|
|
|
|
def add_section_on_create
|
|
@section = Section.create supplier: self, title: I18n.t('section.first_section_title')
|
|
end
|
|
|
|
end
|