class OrderItem < ApplicationRecord self.primary_key = "order_items_id" #primary key - need to be unique before_create :generate_custom_id #Associations belongs_to :order, autosave: true # belongs_to :order, counter_cache: true #Validation validates_presence_of :item_code, :item_name, :qty # validates :qty, numericality: { :greater_than => 0 } validates_associated :order #This Method - handle how items is added into order # order_item : { # order_item_code : "", # item_instance_code : "", # quantity : 0, # option_values : [], # sub_order_items : [], # } def self.processs_item (item_code, instance_code, menu_name, alt_name, account_id, qty,price, options, set_menu_items, order_id, item_order_by, taxable) orderitem = OrderItem.create do |oitem| oitem.order_id = order_id oitem.item_code = item_code oitem.item_instance_code = instance_code oitem.item_name = menu_name oitem.alt_name = alt_name oitem.account_id = account_id oitem.qty = qty oitem.price = price oitem.taxable = taxable oitem.options = options oitem.set_menu_items = set_menu_items oitem.item_order_by = item_order_by #person who order this. * If emenu - it will be login user on the app end #logger.debug orderitem.to_yml orderitem.save! end #Origami : Cashier : to show order items details def self.get_order_items_details(booking_id) # booking_orders = BookingOrder.where("booking_id=?",booking.booking_id) # if booking_orders # booking_orders.each do |book_order| # order_details = OrderItem.select("order_items.item_name,order_items.qty,order_items.price,(order_items.qty*order_items.price) as total_price") # .joins("left join orders on orders.order_id = order_items.order_id") # .where("order_items.order_id=?",book_order.order) # return order_details # end # else # return false # end order_details = OrderItem.select("order_items.item_name,order_items.qty,order_items.price,(order_items.qty*order_items.price) as total_price") .joins("left join orders on orders.order_id = order_items.order_id") .joins("left join booking_orders on booking_orders.order_id = order_items.order_id") .joins("left join bookings on bookings.booking_id = booking_orders.booking_id") .where("bookings.booking_id=?",booking_id) return order_details end def self.sync_order_item_records(order_items) if !order_items.nil? order_items.each do |item| unless OrderItem.exists?(item['order_items_id']) order_item = OrderItem.new order_item.order_items_id = item['order_items_id'] order_item.order_id = item['order_id'] order_item.order_item_status = item['order_item_status'] order_item.item_order_by = item['item_order_by'] order_item.item_code = item['item_code'] order_item.item_instance_code = item['item_instance_code'] order_item.item_name = item['item_name'] order_item.alt_name = item['alt_name'] order_item.account_id = item['account_id'] order_item.qty = item['qty'] order_item.price = item['price'] order_item.remark = item['remark'] order_item.options = item['options'] order_item.set_menu_items = item['set_menu_items'] order_item.taxable = item['taxable'] order_item.completed_by = item['completed_by'] order_item.save puts '...... order item has been created. .....' end end end end private def generate_custom_id prefix = "ODI" if ENV["SERVER_MODE"] == 'cloud' prefix = "CODI" end self.order_items_id = SeedGenerator.generate_id(self.class.name, prefix) end end