From f7213b1213d1075162748ebbe1511cacbcd896fa Mon Sep 17 00:00:00 2001 From: Myat Zin Wai Maw Date: Wed, 19 Jun 2019 17:12:44 +0630 Subject: [PATCH] calculate induties in bill --- app/assets/javascripts/addorder.js | 3 + .../induties/assign_in_duties.scss | 8 +- .../induties/assign_in_duties_controller.rb | 9 +- app/controllers/origami/home_controller.rb | 3 +- .../origami/request_bills_controller.rb | 2 +- app/models/dining_charge.rb | 4 +- app/models/sale.rb | 44 +++++++- .../induties/assign_in_duties/index.html.erb | 100 ++++++++++++------ app/views/origami/home/show.html.erb | 7 +- app/views/origami/rooms/show.html.erb | 6 +- app/views/settings/commissions/_form.html.erb | 2 +- app/views/settings/commissions/index.html.erb | 2 +- config/routes.rb | 2 + 13 files changed, 146 insertions(+), 46 deletions(-) diff --git a/app/assets/javascripts/addorder.js b/app/assets/javascripts/addorder.js index b563294c..f5a44e26 100755 --- a/app/assets/javascripts/addorder.js +++ b/app/assets/javascripts/addorder.js @@ -887,8 +887,11 @@ $(function() { e.preventDefault(); $("#oqs_loading_wrapper").show(); var cashier_type = $("#link_type").val(); + localStorage.setItem('cashier_type',cashier_type); quick_service = window.location.href.indexOf("quick_service"); + localStorage.setItem('quick_service',quick_service); food_court = window.location.href.indexOf("food_court"); + localStorage.setItem('food_court',food_court); if (quick_service != -1 || food_court != -1) { type = cashier_type; var table_type = $('#table_type').text(); diff --git a/app/assets/stylesheets/induties/assign_in_duties.scss b/app/assets/stylesheets/induties/assign_in_duties.scss index 1f324cf1..f51fbcff 100644 --- a/app/assets/stylesheets/induties/assign_in_duties.scss +++ b/app/assets/stylesheets/induties/assign_in_duties.scss @@ -78,8 +78,8 @@ margin-left: 0.5rem; } .show_all_commissioner_card{ - min-height: 805px; - max-height: 805px; + min-height: 830px; + max-height: 830px; overflow: scroll; } .sweet-alert p { @@ -89,4 +89,8 @@ .sweet-alert { top :0; margin-top: 20px !important; +} +.add_to_charges{ + width:100%; + padding:1rem; } \ No newline at end of file diff --git a/app/controllers/induties/assign_in_duties_controller.rb b/app/controllers/induties/assign_in_duties_controller.rb index 357f7b0e..528c009f 100644 --- a/app/controllers/induties/assign_in_duties_controller.rb +++ b/app/controllers/induties/assign_in_duties_controller.rb @@ -2,7 +2,6 @@ class Induties::AssignInDutiesController < ApplicationController def index @commissioners =[] @commiss=Commissioner.active.all.order(created_at: :desc) - # puts @commissioners.to_json @commiss.each do|commissioner| check_in_count =InDuty.where('commissioner_ids =? and out_time is null', commissioner.id.to_json).count; @commissioners.push({ "id"=>commissioner.id, @@ -13,6 +12,7 @@ class Induties::AssignInDutiesController < ApplicationController end @booking_id = params[:booking_id] + end def get_all_occupied_dining @@ -60,5 +60,12 @@ class Induties::AssignInDutiesController < ApplicationController induty = InDuty.find(induty_id) induty.destroy end + def get_current_booking + @current_booking =InDuty.select("in_duties.*,dining_facilities.type as dinning_type") + .joins(" LEFT JOIN dining_facilities on dining_facilities.id = in_duties.dinning_id").where('booking_id =? and out_time is null', params[:booking_id]).order(created_at: :asc); + respond_to do |format| + format.json { render json: @current_booking.to_json } + end + end end diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 8b767fa2..2be1584a 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -35,7 +35,7 @@ class Origami::HomeController < BaseOrigamiController @payment_methods = PaymentMethodSetting.all @dining_booking = @dining.bookings.active.where("DATE_FORMAT(created_at,'%Y-%m-%d') = '#{DateTime.now.strftime('%Y-%m-%d')}' OR DATE_FORMAT(created_at,'%Y-%m-%d') = '#{Date.today.prev_day}' ") #@dining_booking = @dining.bookings.active.where("created_at between '#{DateTime.now.utc - 12.hours}' and '#{DateTime.now.utc}'") - @order_items = Array.new + @order_items = Array.new @dining_booking.each do |booking| if booking.sale_id.nil? && booking.booking_status != 'moved' @order_items = Array.new @@ -144,6 +144,7 @@ class Origami::HomeController < BaseOrigamiController end end end + end def check_emp_access_code diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index e1cec136..46b39a70 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -28,7 +28,7 @@ class Origami::RequestBillsController < ApplicationController if check_booking.sale_id.nil? # Create Sale if it doesn't exist - @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source) + @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source, params[:current_checkin_induties_count]) @sale_data = Sale.find_by_sale_id(@sale_id) @sale_items = SaleItem.where("sale_id=?",@sale_id) diff --git a/app/models/dining_charge.rb b/app/models/dining_charge.rb index 2a351778..066f681f 100755 --- a/app/models/dining_charge.rb +++ b/app/models/dining_charge.rb @@ -8,6 +8,7 @@ class DiningCharge < ApplicationRecord block_count = 0 price = 0 minutes = DiningCharge.time_diff(checkout, checkin) + checkin_minutes =minutes free_time = DiningCharge.convert_to_minutes(dining_charges_obj.minimum_free_time.utc.strftime('%H:%M')) dining_minutes = minutes #- free_time # stayminutes - free minutes if dining_minutes <= free_time @@ -20,7 +21,7 @@ class DiningCharge < ApplicationRecord block_count, price = DiningCharge.charges(dining_charges_obj, dining_minutes, 'day') end end - return block_count, price + return block_count, price ,checkin_minutes else puts "<<<<<<<< NO" end @@ -34,7 +35,6 @@ class DiningCharge < ApplicationRecord charge_block = DiningCharge.convert_to_minutes(chargesObj.charge_block.utc.strftime('%H:%M')) result = dining_minutes / charge_block - rounding_time = DiningCharge.convert_to_minutes(chargesObj.time_rounding_block.utc.strftime('%H:%M')) if result.to_i < 1 # for dining minute is under charge_block diff --git a/app/models/sale.rb b/app/models/sale.rb index ebd45b8a..3b7d8d28 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -27,7 +27,7 @@ class Sale < ApplicationRecord SALE_STATUS_OUTSTANDING = "outstanding" SALE_STATUS_COMPLETED = "completed" - def generate_invoice_from_booking(booking_id, requested_by, cashier, order_source = nil) + def generate_invoice_from_booking(booking_id, requested_by, cashier, order_source = nil, current_checkin_induties_count) booking = Booking.find(booking_id) status = false Rails.logger.debug "Booking -> " + booking.id.to_s @@ -50,12 +50,32 @@ class Sale < ApplicationRecord # dining charges charges = DiningCharge.where('dining_facility_id=?',booking.dining_facility_id).take if !charges.nil? - block_count, diningprice = DiningCharge.amount_calculate(charges, booking.checkin_at, booking.checkout_at) + block_count, diningprice , checkin_minutes = DiningCharge.amount_calculate(charges, booking.checkin_at, booking.checkout_at) if charges.charge_type =='hr' dining_time = booking.checkin_at.strftime('%H:%M %p').to_s + " - " + booking.checkout_at.strftime('%H:%M %p').to_s else dining_time = booking.checkin_at.strftime('%B %d, %H:%M %p').to_s + " - " + booking.checkout_at.strftime('%B %d, %H:%M %p').to_s end + # later_time = booking.checkout_at + # early_time = booking.checkin_at + # distance_in_minutes = ((later_time - early_time)/60.0).round + # # time = ((later_time.hour*3600+later_time.min*60+later_time.sec) - (early_time.hour*3600+early_time.min*60+early_time.sec))/24 + # puts "Hello time" + # puts distance_in_minutes + # # puts checkin_minutes / 60 + # puts "Hello block_count" + basic_pay_amount =0 + name ="" + if current_checkin_induties_count != "0" + basic_pay = Commission.where('commission_type=?','Basic Pay') + basic_pay.each do |pay| + basic_pay_amount =pay.amount + name =pay.name + end + induties_pay_amount = (current_checkin_induties_count.to_i * (checkin_minutes.to_i / 60).to_f * basic_pay_amount).to_i + create_saleitem_indutycharges(charges, current_checkin_induties_count.to_i, induties_pay_amount, booking.dining_facility.name, dining_time, order_source, basic_pay_amount) + end + create_saleitem_diningcharges(charges, block_count, diningprice, booking.dining_facility.name, dining_time, order_source) end @@ -330,7 +350,25 @@ class Sale < ApplicationRecord sale = Sale.find(self.id) self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source) end - + def create_saleitem_indutycharges(chargeObj, current_checkin_induties_count, induties_pay_amount, dining_name, dining_time, order_source = nil, basic_pay_amount) + sale_item = SaleItem.new + sale_item.menu_category_code = "IndutyCharge" + sale_item.menu_category_name = "Induty Charge" + sale_item.product_code = "" + sale_item.product_name ='Vocalist' + " ( " + dining_time.to_s + " )" + sale_item.account_id = 0 + sale_item.product_alt_name = "-" + sale_item.qty = current_checkin_induties_count + sale_item.unit_price = basic_pay_amount + sale_item.taxable_price = induties_pay_amount + sale_item.is_taxable = chargeObj.taxable + sale_item.sale_id = self.id + sale_item.price = induties_pay_amount + sale_item.save + # Re-calc + sale = Sale.find(self.id) + self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source) + end def update_item (item) #save sale_audit diff --git a/app/views/induties/assign_in_duties/index.html.erb b/app/views/induties/assign_in_duties/index.html.erb index a9ed8d61..fc30fed5 100644 --- a/app/views/induties/assign_in_duties/index.html.erb +++ b/app/views/induties/assign_in_duties/index.html.erb @@ -13,9 +13,9 @@
);background-repeat: no-repeat; background-size: cover;">
-
<%=com["name"] %>
+
<%=com["name"] %>
<% if com["check_in_count"] >0%> -
Active <%=com["check_in_count"] %>
+
A :<%=com["check_in_count"] %>
<% end %>
@@ -61,9 +61,14 @@
-
-
-
+
+
+ +
+
+
+
+
@@ -87,14 +92,14 @@
-
+
<%= simple_form_for 'save_induties', :url => induties_induties_create_path, :method => :post do |f| %> <%= f.check_box :by_name,:class=>'form-control'%> <% end %>
- Create In Duty +
@@ -108,9 +113,13 @@ window.location.href = '/origami/'+dinning_type+'/'+dinning_id; }); $( document ).ready(function() { - document.getElementById("btn_create_induty").disabled = true; + // document.getElementById("btn_create_induty").disabled = true; + $('#btn_create_induty').attr("disabled", 'disabled'); + var booking_id=document.getElementById("booking_id").value + getCurrentBooking(booking_id); }); $(document).on('click', '.btn_create_induty', function(event){ + $('.add_to_order').html(""); event.preventDefault(); var str=document.getElementById("zone_dinning_id").value; var str_t=document.getElementById("zone_t_dinning_id").value; @@ -154,7 +163,9 @@ } }); $(document).on('click', '.touch_commissioner', function(event){ + $('#btn_create_induty').attr("disabled", ''); $(".success-msg").css('display','none'); + $('.add_to_order').html(""); document.getElementById("btn_create_induty").disabled = false; var commissionerId = this.getAttribute("commissionerId"); var commissionerName = this.getAttribute("commissionerName"); @@ -167,26 +178,15 @@ url: "/induties/assign_in_duties/get_all_occupied_dining/"+commissionerId, dataType: "json", success: function (data) { - $('.commissionerName').append('