merged crm

This commit is contained in:
Yan
2017-06-06 09:41:06 +06:30
22 changed files with 371 additions and 129 deletions

View File

@@ -1,6 +1,6 @@
class Customer < ApplicationRecord
self.primary_key = "customer_id"
before_create :generate_custom_id
has_many :orders
has_many :sales

View File

@@ -1,5 +1,7 @@
class MenuItem < ApplicationRecord
# belongs_to :account
#belongs_to :account
belongs_to :menu_category, :optional => true
has_many :menu_item_instances
belongs_to :parent, :class_name => "MenuItem", foreign_key: "menu_item_id", :optional => true

View File

@@ -192,7 +192,7 @@ class Order < ApplicationRecord
# Count number of different items
self.item_count = self.order_items.item_count
self.quantity_count = quantity_count
# Counter number of quantity
# Counter number of quantityf
end
#Process order items and send to order queue
@@ -209,43 +209,69 @@ class Order < ApplicationRecord
end
#Origami: Cashier : to view order type Table
def self.get_order_table
order_table = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
order_items.id as order_items_id,dining_facilities.name as table_name")
.joins("left join booking_orders on booking_orders.order_id = orders.id
left join bookings on bookings.id = booking_orders.id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
left join order_items on order_items.order_id = orders.id")
.where("dining_facilities.type=? and orders.order_type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,"dine_in",true)
.group("orders.id")
def self.get_booking_order_table
booking_orders = Booking.select("sales.receipt_no,orders.status as order_status,
bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
.joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
.joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
.joins("left join orders on orders.order_id = booking_orders.order_id")
.joins("left join sale_orders on sale_orders.order_id = orders.order_id")
.joins("left join sales on sales.sale_id = sale_orders.sale_id")
.where("booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,true)
.group("bookings.booking_id")
end
#Origami: Cashier : to view order type Room
def self.get_booking_order_rooms
booking_rooms = Booking.select("sales.receipt_no,orders.status as order_status,bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as room_name")
.joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
.joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
.joins("left join orders on orders.order_id = booking_orders.order_id")
.joins("left join sale_orders on sale_orders.order_id = orders.order_id")
.joins("left join sales on sales.sale_id = sale_orders.sale_id")
.where("booking_orders.order_id IS NOT NULL and dining_facilities.type=? and dining_facilities.is_active=?",DiningFacility::ROOM_TYPE,true)
.group("bookings.booking_id")
end
#Origami: Cashier : to view order type Room
def self.get_order_rooms
order_rooms = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
order_rooms = Order.select("orders.order_id as order_id,sum(order_items.qty*order_items.price) as total_price,
order_items.id as order_items_id,dining_facilities.name as room_name")
.joins("left join booking_orders on booking_orders.order_id = orders.id
left join bookings on bookings.id = booking_orders.id
.joins("left join booking_orders on booking_orders.order_id = orders.order_id
left join bookings on bookings.booking_id = booking_orders.order_id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
left join order_items on order_items.order_id = orders.id")
left join order_items on order_items.order_id = orders.order_id")
.where("dining_facilities.type=? and orders.order_type=? and dining_facilities.is_active=?",DiningFacility::ROOM_TYPE,"dine_in",true)
.group("orders.id,order_items.id,dining_facilities.name")
.group("orders.order_id,order_items.id,dining_facilities.name")
end
#Origami: Cashier : to view orders
def self.get_orders
from = Time.now.beginning_of_day.utc
to = Time.now.end_of_day.utc
orders = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price,
order_items.id as order_items_id,dining_facilities.name as table_or_room_name")
.joins("left join booking_orders on booking_orders.order_id = orders.id
left join bookings on bookings.id = booking_orders.id
orders = Order.select("orders.order_id as order_id,sales.receipt_no,orders.status as order_status,bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
.joins("left join booking_orders on booking_orders.order_id = orders.order_id
left join bookings on bookings.booking_id = booking_orders.order_id
left join dining_facilities on dining_facilities.id = bookings.dining_facility_id
left join order_items on order_items.order_id = orders.id")
left join order_items on order_items.order_id = orders.order_id
left join sale_orders on sale_orders.order_id = orders.order_id
left join sales on sales.sale_id = sale_orders.sale_id")
.where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
.group("orders.id")
.group("orders.order_id")
# Booking.select("sales.receipt_no,orders.status as order_status,bookings.booking_id,sales.sale_id as sale_id,dining_facilities.name as table_name")
# .joins("left join booking_orders on booking_orders.booking_id = bookings.booking_id")
# .joins("left join dining_facilities on dining_facilities.id = bookings.dining_facility_id")
# .joins("left join orders on orders.order_id = booking_orders.order_id")
# .joins("left join sale_orders on sale_orders.order_id = orders.order_id")
# .joins("left join sales on sales.sale_id = sale_orders.sale_id")
# .where("booking_orders.order_id IS NOT NULL and dining_facilities.is_active=? and orders.date between ? and ?",true,from,to)
# .group("orders.order_id")
end
private
def generate_custom_id
self.order_id = SeedGenerator.generate_id(self.class.name, "ODR")

View File

@@ -39,11 +39,19 @@ class OrderItem < ApplicationRecord
end
#Origami : Cashier : to show order items details
def self.get_order_items_details(order_id)
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.id = order_items.order_id")
.where("order_items.order_id=?",order_id)
def self.get_order_items_details(booking_id)
booking_orders = BookingOrder.where("booking_id=?",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
end
private

View File

@@ -64,12 +64,12 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
self.print(filename)
end
#Bill Receipt Print
def print_receipt_bill(printer_settings,sale_items,sale)
def print_receipt_bill(printer_settings,sale_items,sale,sale_data)
#Use CUPS service
#Generate PDF
#Print
pdf = ReceiptBillPdf.new(printer_settings,sale_items,sale)
pdf.render_file "tmp/receipt_bill_#{sale.id}.pdf"
self.print("tmp/receipt_bill_#{sale.id}.pdf")
pdf = ReceiptBillPdf.new(printer_settings,sale_items,sale,sale_data)
pdf.render_file "tmp/receipt_bill.pdf"
self.print("tmp/receipt_bill.pdf")
end
end

View File

@@ -25,9 +25,9 @@ class Sale < ApplicationRecord
#get all order attached to this booking and combine into 1 invoice
booking.booking_orders.each do |order|
if booking.sale_id
status, sale_id = generate_invoice_from_order(order.order_id, nil, requested_by)
status, sale_id = generate_invoice_from_order(order.order_id, nil, booking, requested_by)
else
status, sale_id = generate_invoice_from_order(order.order_id, booking.sale_id, requested_by)
status, sale_id = generate_invoice_from_order(order.order_id, booking.sale_id, booking, requested_by)
end
booking.sale_id = sale_id
end
@@ -36,7 +36,7 @@ class Sale < ApplicationRecord
end
end
def generate_invoice_from_order (order_id, sale_id, requested_by)
def generate_invoice_from_order (order_id, sale_id, booking, requested_by)
taxable = true
#if sale_id is exsit and validate
#add order to that invoice
@@ -67,8 +67,8 @@ class Sale < ApplicationRecord
add_item(item)
end
link_order_sale(order.id)
link_order_sale(order.id)
end
@@ -78,6 +78,11 @@ class Sale < ApplicationRecord
#Update the order items that is billed
order.update_items_status_to_billed(nil)
order.status = "billed"
order.save
booking.sale_id = self.id
booking.save
return true, self.id
end

View File

@@ -10,8 +10,24 @@ class SaleItem < ApplicationRecord
def compute_item
end
def self.get_order_items_details(sale_id)
sale_orders = SaleOrder.where("sale_id=?",sale_id)
if sale_orders
sale_orders.each do |sale_order|
order_details = SaleItem.select("sales.total_discount as discount_amount,DATE_FORMAT(sales.receipt_date,'%Y-%m-%d %h:%m') as receipt_date,sales.cashier_name,sales.receipt_no,sale_items.product_name as item_name,sale_items.qty,sale_items.price,sale_items.unit_price as total_price")
.joins("left join sales on sales.id = sale_items.sale_id")
.where("sale_items.sale_id=?",sale_order.sale_id)
return order_details
end
else
return false
end
end
private
def generate_custom_id
self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")
end
end

View File

@@ -14,9 +14,11 @@ class SeedGenerator < ApplicationRecord
seed.current = current_no
seed.save
end
padding_len = 15 - prefix.length
return prefix +"-"+ seed.current.to_s.to_s.rjust((14-prefix.length)+1,'0')
end
def self.new_receipt_no