split bill for order item

This commit is contained in:
phyusin
2018-02-06 16:17:08 +06:30
parent 0780744377
commit f093f1f0a7
3 changed files with 140 additions and 60 deletions

View File

@@ -6,21 +6,31 @@ class Origami::SplitBillController < BaseOrigamiController
@table = DiningFacility.find(dining_id)
@booking = @table.get_booking
@order_items = Array.new
@sale_data = Array.new
table_bookings = Booking.where("dining_facility_id = #{dining_id} and sale_id IS NOT NULL")
if !table_bookings.nil?
table_bookings.each do |table_booking|
@sale_data.push(table_booking.sale)
end
end
if @booking
@booking.booking_orders.each do |booking_order|
@order = Order.find(booking_order.order_id)
if (@order.status == "new")
@order.order_items.each do |item|
@order_items.push(item)
end
end
end
@booking.booking_orders.each do |booking_order|
@order = Order.find(booking_order.order_id)
if (@order.status == "new")
@order.order_items.each do |item|
@order_items.push(item)
end
end
end
else
@booking = nil
end
end
def create
order_ids = params[:order_ids]
order_items = JSON.parse(params[:order_items])
# byebug
status = false
@@ -59,36 +69,65 @@ class Origami::SplitBillController < BaseOrigamiController
:checkin_at => Time.now.utc, :checkin_by => current_user.name,
:booking_status => "assign" })
customer = Customer.find(params[:customer_id])
order_type = "dine_in"
if !customer.nil?
if customer.customer_type == "Takeaway"
order_type = "takeaway"
elsif customer.customer_type == "Delivery"
order_type = "delivery"
order_item_count = 0
order_id = nil
order_items.each do |order_item|
order_item_count = 0
order = Order.find(order_item["order_id"])
if order.order_items.count == 1
order_id = order.id
break
else
order_item_count += 1
end
end
# begin
order = Order.new
order.date = Time.now.utc
order.source = "cashier"
order.order_type = order_type
order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[:customer_id] # for no customer id from mobile
order.item_count = order_items.count
order.status = "new"
order.table_id = params[:dining_id] # this is dining facilities's id
order.waiters = current_user.name
order.employee_name = current_user.name
order.guest_info = nil
order.save
BookingOrder.create({:booking_id => booking.booking_id, :order_id => order.order_id})
if !order_id.nil?
BookingOrder.find_by_order_id(order_id).delete
order_items.each do |order_item|
orderItem = OrderItem.find(order_item["id"])
orderItem.order_id = order.order_id
orderItem.save
end
BookingOrder.create({:booking_id => booking.booking_id, :order_id => order_id})
order_items.each do |order_item|
orderItem = OrderItem.find(order_item["id"])
orderItem.order_id = order_id
orderItem.save!
end
else
if order_ids.count == 1 && order_item_count == 1
BookingOrder.create({:booking_id => booking.booking_id, :order_id => order_ids[0]})
else
customer = Customer.find(params[:customer_id])
order_type = "dine_in"
if !customer.nil?
if customer.customer_type == "Takeaway"
order_type = "takeaway"
elsif customer.customer_type == "Delivery"
order_type = "delivery"
end
end
# begin
order = Order.new
order.source = "cashier"
order.order_type = order_type
order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[:customer_id] # for no customer id from mobile
order.item_count = order_items.count
order.status = "new"
order.table_id = params[:dining_id] # this is dining facilities's id
order.waiters = current_user.name
order.employee_name = current_user.name
order.guest_info = nil
order.save!
BookingOrder.create({:booking_id => booking.booking_id, :order_id => order.order_id})
order_items.each do |order_item|
orderItem = OrderItem.find(order_item["id"])
orderItem.order_id = order.order_id
orderItem.save!
end
end
end
sale = Sale.new
status, sale_id = sale.generate_invoice_from_booking(booking.booking_id, current_user, get_cashier_by_terminal)

View File

@@ -194,16 +194,14 @@
</div>
</div>
<div class="card-footer ">
<table class="m-b--20" id="order-charges-table" border="0">
<table class="table" id="order-charges-table" border="0">
<tr>
<td class="charges-name"><strong>Sub Total:</strong></td>
<td colspan="2" class="charges-name"><strong>Sub Total:</strong></td>
<td class="item-attr"><strong id="order-sub-total"><%= sub_total %></strong></td>
</tr>
<tr>
<td class="charges-name"><strong>Discount:</strong></td>
<td class="item-attr"><strong id="order-discount">(<%=@selected_item.total_discount rescue 0%>)</strong></td>
<td colspan="2" class="charges-name"><strong>Discount:</strong></td>
<td class="item-attr"><strong id="order-discount">(<%=@selected_item.total_discount rescue 0%>)</strong></td>
</tr>
<tr class="rebate_amount"></tr>
</table>

View File

@@ -4,7 +4,7 @@
</div>
<div class="row">
<!-- Column One -->
<div class="col-lg-8 col-md-8 col-sm-8">
<div class="col-lg-7 col-md-7 col-sm-7">
<!-- Order Details -->
<div class="card" >
<!-- <div class="card-header">
@@ -12,14 +12,13 @@
</div> -->
<div class="card-block">
<div class="card-title row">
<div class="col-lg-6 col-md-6 col-sm-6">
<div class="col-lg-12 col-md-12 col-sm-12">
<span class="hidden" id ="table_id" value="<%=@table.id%>"><%=@table.id%></span>
<span class="hidden" id="table_type" value="<%=@table.type%>"><%=@table.type%></span>
<span class="hidden" id="customer_id" value="<%= @order.customer_id %>"><%= @order.customer_id %></span>
<p class="m-l-10">Order No: <span id="order_no"><%=@order.order_id rescue ' '%></span></p>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 text-right">
<p class="m-r-10">Date: <span id="order_date"> <%=@order.created_at.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%></span></p>
<% if !@order.nil? %>
<span class="hidden" id="customer_id" value="<%= @order.customer_id %>"><%= @order.customer_id %></span>
<% end %>
<p class="m-l-15">Order Lists</p>
</div>
</div>
<div id="order-detail-slimscroll" data-height="160">
@@ -40,6 +39,7 @@
%>
<tr class="item-row" id=<%= order_item.order_items_id %> >
<td style="width:60%; text-align:left">
<span id="item-order-id" class="hidden"><%=order_item.order_id%></span>
<span id="item-account-type" class="hidden"><%=order_item.account_id%></span>
<span id="item-name-price"><%=order_item.item_name%></span>
</td>
@@ -69,16 +69,42 @@
</div>
</div>
<!-- Column One -->
<div class="col-lg-3 col-md-3 col-sm-3 clearfix"></div>
<!-- Column Two -->
<div class="col-lg-4 col-md-4 col-sm-4">
<div class="card">
<div class="card-block">
<div class="card-title row">
<p class="m-l-15">Receipt Lists</p>
</div>
<div id="order-detail-slimscroll" data-height="160">
<div class="card-text dining">
<% if !@sale_data.nil? %>
<table class="table table-default">
<tbody>
<% @sale_data.each do |sale_data| %>
<tr class="receipt_row" id=<%= sale_data.sale_id %> >
<td>Receipt No. - <span id="receipt_no"><%= sale_data.receipt_no %></span></td>
</tr>
<% end %>
</tbody>
</table>
<% end %>
</div>
</div>
<div class="card-footer"></div>
</div>
</div>
</div>
<!-- Column Two -->
<!-- Column Three -->
<div class="col-lg-1 col-md-1 col-sm-1">
<!-- Action Panel -->
<div>
<button type="button" class="btn bg-default btn-block" id="back" ><i class="material-icons">reply</i> Back </button>
<button id="order_item_split" class="btn btn-primary btn- action-btn">Order Items Split</button>
<!-- <button id="per_person" class="btn bg-primary btn-block action-btn">Per Person</button> -->
</div>
</div>
<!-- Column Three -->
</div>
</div>
@@ -142,7 +168,7 @@
var order_items = get_selected_order_items();// Selected Order Items
var cnt_items = parseInt(cnt_order_item) - parseInt(order_items.length);
if (order_items.length > 0){
if(cnt_items > 0){
// if(cnt_items > 0){
swal({
title: "Alert",
text: "Are you sure, you want to Split?",
@@ -156,14 +182,21 @@
splitBillProcess(cnt_items);
}
});
}
else{
splitBillProcess(cnt_items);
}
// }
// else{
// splitBillProcess(cnt_items);
// }
}else{
swal("Opps","Please select at least on item!","warning");
}
});
//selected receipt row click
$('.receipt_row').on('click',function(){
var dining_id = $("#table_id").text();
var sale_id = $(this).attr('id').substr(0,16);
window.location = '/origami/table/' + dining_id + "/table_invoice/" + sale_id;
});
});
/* function for split bill process */
@@ -177,23 +210,32 @@ function splitBillProcess(cnt_items){
if(cnt_items == 0){
booking_id = json_booking.booking_id;
}
var order_ids = [];
if(order_items!=undefined && order_items!=null){
$.each(order_items,function(key,value){
if($.inArray(value.order_id,order_ids) == -1){
order_ids.push(value.order_id);
}
});
}
var ajax_url = "/origami/split_bills";
$.ajax({
type: "POST",
url: ajax_url,
dataType: 'JSON',
data: {'dining_id' : dining_id, 'type': type, 'customer_id' : customer_id, 'booking_id' : booking_id, 'order_items' : JSON.stringify(order_items)},
data: {'dining_id' : dining_id, 'type': type, 'customer_id' : customer_id, 'booking_id' : booking_id, 'order_ids' : order_ids, 'order_items' : JSON.stringify(order_items)},
success: function (result) {
if (!result.status) {
swal("Information!", result.error_message);
}
else {
if (cnt_items > 0){
// if (cnt_items > 0){
window.location.reload();
}else{
backToOrigami();
}
// }else{
// backToOrigami();
// }
}
}
});
@@ -216,6 +258,7 @@ function get_selected_order_items(){
$('.item-row.selected-item').each(function(i){
var order_item = {};
order_item.id = $(this).attr('id').substr(0,16);
order_item.order_id = $(this).find('#item-order-id').text().trim();
order_item.name = $(this).find('#item-name-price').text().split('@')[0];
order_item.account_id = $(this).find('#item-account-type').text();
order_item.price = $(this).find('#item-total-price').text();