diff --git a/app/assets/javascripts/custom.js b/app/assets/javascripts/custom.js index 585a5ce9..c233215a 100644 --- a/app/assets/javascripts/custom.js +++ b/app/assets/javascripts/custom.js @@ -200,6 +200,10 @@ $(document).ready(function() { // }); // }); + $("#refresh").on('click', function(){ + window.location.reload(); + }) + // for Notificaiotn message var placementFrom = $("#notify_message").attr('data-placement-from'); var placementAlign = $("#notify_message").attr('data-placement-align'); diff --git a/app/controllers/api/bookings_controller.rb b/app/controllers/api/bookings_controller.rb index 09b64137..fd742309 100755 --- a/app/controllers/api/bookings_controller.rb +++ b/app/controllers/api/bookings_controller.rb @@ -1,5 +1,5 @@ class Api::BookingsController < Api::ApiController - skip_before_action :authenticate + # skip_before_action :authenticate #Show customer by ID def index @bookings = Booking.all diff --git a/app/controllers/api/change_tax_controller.rb b/app/controllers/api/change_tax_controller.rb new file mode 100644 index 00000000..8290f93a --- /dev/null +++ b/app/controllers/api/change_tax_controller.rb @@ -0,0 +1,16 @@ +class Api::ChangeTaxController < Api::ApiController + + def index + sale_id = params[:sale_id] + group_type = params[:group_type] + tax_type = params[:tax_type].present? ? params[:tax_type] : "no_tax" + + sale = Sale.find(sale_id) + + sale.compute_by_sale_items(sale.total_discount, nil, group_type, tax_type) + + remark = "Change tax to #{tax_type} for Sale ID #{sale_id} By #{current_login_employee.name}" + SaleAudit.record_audit_change_tax(sale_id,remark,current_login_employee.name) + end + +end diff --git a/app/controllers/api/customers_controller.rb b/app/controllers/api/customers_controller.rb index 62bc8a7b..d232a48c 100755 --- a/app/controllers/api/customers_controller.rb +++ b/app/controllers/api/customers_controller.rb @@ -23,9 +23,10 @@ class Api::CustomersController < Api::ApiController def get_customer_by_account account_no = params[:account_no] + group_type = params[:group_type] || 'food_court' unless @customer = Customer.find_by(paypar_account_no: account_no) - response = Customer.search_paypar_account_no(account_no) + response = Customer.search_paypar_account_no(account_no) if response["status"] == true @customer = Customer.create({ name: response["customer_data"]["name"], @@ -39,8 +40,10 @@ class Api::CustomersController < Api::ApiController membership_id: response["customer_data"]["id"], membership_type: response["customer_data"]["member_group_id"], customer_type: "Dinein", - tax_profiles: ["1", "2"], + tax_profiles: TaxProfile.where(group_type: group_type).pluck(:id), }) + else + @message = response["message"] end end end diff --git a/app/controllers/api/discounts_controller.rb b/app/controllers/api/discounts_controller.rb index 1d5d1c52..24391733 100755 --- a/app/controllers/api/discounts_controller.rb +++ b/app/controllers/api/discounts_controller.rb @@ -1,19 +1,138 @@ -class Api::DiscountsController < ActionController::API - def create - @invoice = Sale.find(params[:invoice_id]) +class Api::DiscountsController < Api::ApiController + + def create + sale_id = params[:sale_id] + sale_item_id = params[:sale_item_id] + discount = params[:discount].to_d + discount_type = params[:discount_type] + + @sale = Sale.find(sale_id) + @booking = @sale.booking + dining_facility = @booking.dining_facility + action_by = current_login_employee.name + + bill_discount = @sale.total_discount + + if sale_item_id + sale_item = SaleItem.find(sale_item_id) + discount_item = sale_item.discount_item + + if discount > 0 + unless discount_item + discount_item = sale_item.build_discount_item + end + + discount_item.discount = discount + if discount_type == 'nett' + discount_item.discount_type = 'nett' + discount_item.product_name = "#{sale_item.product_name} - discount" + unit_price = discount + elsif discount_type == 'percentage' + discount_item.discount_type = 'percentage' + discount_item.product_name = "#{sale_item.product_name} - discount(#{discount}%)" + unit_price = sale_item.unit_price * (discount / 100) + end + + price = unit_price * sale_item.qty + + discount_item.menu_category_code = sale_item.menu_category_code + discount_item.menu_category_name = sale_item.menu_category_name + + discount_item.sale_id = sale_id + discount_item.product_code = sale_item != nil ? sale_item.product_code : sale_id + discount_item.item_instance_code = sale_item.item_instance_code + discount_item.product_alt_name = "" + discount_item.status = "Discount" + + discount_item.qty = sale_item.qty + discount_item.unit_price = unit_price + discount_item.taxable_price = -price + discount_item.is_taxable = sale_item.is_taxable + discount_item.account_id = sale_item.account_id + + discount_item.price = -price + discount_item.save + + remark = "Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{@sale.receipt_no} " + + sale_audit = SaleAudit.record_audit_discount(discount_item.sale_id, @sale.cashier_name, action_by, remark, "ITEMDISCOUNT" ) + else + discount_item.destroy + + if dining_facility.nil? + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{@sale.receipt_no} | Table- No Table " + else + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{@sale.receipt_no} | Table- #{dining_facility.name} " + end + sale_audit = SaleAudit.record_audit_discount(@sale.sale_id, @sale.cashier_name, action_by, remark, "REMOVEITEMDISCOUNT" ) + end + else + if discount > 0 + if discount_type == 'nett' + bill_discount = discount + elsif discount_type == 'percentage' + bill_discount = @sale.total_amount * (discount / 100) + end + + if dining_facility.nil? + remark = "Discount Overall Price [#{bill_discount}]| Receipt No #{@sale.receipt_no} | Table- no Table " + else + remark = "Discount Overall Price [#{bill_discount}]| Receipt No #{@sale.receipt_no} | Table- #{dining_facility.name} " + end + + sale_audit = SaleAudit.record_audit_discount(@sale.sale_id, @sale.cashier_name, action_by, remark, "OVERALLDISCOUNT" ) + else + if dining_facility.nil? + remark = "Remove Discount Sale Id [#{@sale.sale_id}]| Receipt No #{@sale.receipt_no} | Table- No Table" + else + remark = "Remove Discount Sale Id [#{@sale.sale_id}]| Receipt No #{@sale.receipt_no} | Table- #{dining_facility.name} " + end + sale_audit = SaleAudit.record_audit_discount(@sale.sale_id, @sale.cashier_name, action_by, remark, "REMOVEALLDISCOUNT" ) + + bill_discount = 0.0.to_d + end + end + + @sale.compute_by_sale_items(bill_discount, nil, order_source) end - #Update sale item - Price | Qty | - def update - end - - #destroy - Remove items form invoice def destroy - @sale.remove_item(params[:sale_item_id]) + sale_id = params[:sale_id] + sale_item_id = params[:sale_item_id] + + @sale = Sale.find(sale_id) + @booking = @sale.booking + dining_facility = @booking.dining_facility + action_by = current_login_employee.name + + bill_discount = @sale.total_discount + + if sale_item_id + sale_item = SaleItem.find(sale_item_id) + discount_item = sale_item.discount_item + discount_item.destroy + + if dining_facility.nil? + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{@sale.receipt_no} | Table- No Table " + else + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{@sale.receipt_no} | Table- #{dining_facility.name} " + end + sale_audit = SaleAudit.record_audit_discount(@sale.sale_id, @sale.cashier_name, action_by, remark, "REMOVEITEMDISCOUNT" ) + else + if dining_facility.nil? + remark = "Remove Discount Sale Id [#{@sale.sale_id}]| Receipt No #{@sale.receipt_no} | Table- No Table" + else + remark = "Remove Discount Sale Id [#{@sale.sale_id}]| Receipt No #{@sale.receipt_no} | Table- #{dining_facility.name} " + end + sale_audit = SaleAudit.record_audit_discount(@sale.sale_id, @sale.cashier_name, action_by, remark, "REMOVEALLDISCOUNT" ) + + bill_discount = 0.0.to_d + end + @sale.compute_by_sale_items(bill_discount, nil, order_source) end private - def set_invoice_params - @sale = Sale.find(params[:invoice_id]) + def order_source + params[:order_source] || 'food_court' end end diff --git a/app/controllers/api/foodcourt/bills_controller.rb b/app/controllers/api/foodcourt/bills_controller.rb index c932bca3..5b4e385e 100644 --- a/app/controllers/api/foodcourt/bills_controller.rb +++ b/app/controllers/api/foodcourt/bills_controller.rb @@ -3,13 +3,13 @@ class Api::Foodcourt::BillsController < Api::ApiController def create Sale.transaction do if shift = ShiftSale.current_open_shift(current_login_employee) - if booking = Booking.find(params[:booking_id]) + if @booking = Booking.find(params[:booking_id]) cashier = Employee.find(shift.employee_id) - order = booking.orders.first + order = @booking.orders.first - if @sale_data = booking.sale + if @sale_data = @booking.sale @status = true - elsif @sale_data = Sale.generate_invoice_from_booking(booking, current_login_employee, cashier, order.source, params[:current_checkin_induties_count]) + elsif @sale_data = Sale.generate_invoice_from_booking(@booking, current_login_employee, cashier, order.source, params[:current_checkin_induties_count]) @status = true else @status = false diff --git a/app/controllers/foodcourt/discounts_controller.rb b/app/controllers/foodcourt/discounts_controller.rb index d0fd55bb..dda9182d 100755 --- a/app/controllers/foodcourt/discounts_controller.rb +++ b/app/controllers/foodcourt/discounts_controller.rb @@ -42,38 +42,56 @@ class Foodcourt::DiscountsController < BaseFoodcourtController table = nil table_id = nil end + + # sale.total_discount = overall_discount.to_f + # sale.total_amount = sub_total.to_f + # sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax; + # sale.save if discount_items.length > 0 #save sale item for discount discount_items.each do |di| - origin_sale_item = SaleItem.find(di["id"]) + discount = di['discount'].to_d + discount_type = di['discount_type'] - sale_item = SaleItem.new + sale_item = SaleItem.find(di["id"]) + discount_item = SaleItem.find_or_initialize_by(parent_id: di['id']) - sale_item.menu_category_code = origin_sale_item.menu_category_code - sale_item.menu_category_name = origin_sale_item.menu_category_name + discount_item.discount = discount + if discount_type == 'nett' + discount_item.discount_type = 'nett' + discount_item.product_name = "#{sale_item.product_name} - discount" + unit_price = discount + elsif discount_type == 'percentage' + discount_item.discount_type = 'percentage' + discount_item.product_name = "#{sale_item.product_name} - discount(#{discount}%)" + unit_price = sale_item.unit_price * (discount / 100) + end - sale_item.sale_id = sale_id - sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id - sale_item.product_name = di["name"] - sale_item.item_instance_code = origin_sale_item.item_instance_code - sale_item.product_alt_name = "" - sale_item.status = "Discount" + price = unit_price * sale_item.qty - sale_item.qty = -1 - sale_item.unit_price = di["price"].to_f * -1 - sale_item.taxable_price = di["price"] - sale_item.is_taxable = 1 - sale_item.account_id = origin_sale_item.account_id + discount_item.menu_category_code = sale_item.menu_category_code + discount_item.menu_category_name = sale_item.menu_category_name - sale_item.price = di["price"] - sale_item.save + discount_item.sale_id = sale_id + discount_item.product_code = sale_item != nil ? sale_item.product_code : sale_id + discount_item.item_instance_code = sale_item.item_instance_code + discount_item.product_alt_name = "" + discount_item.status = "Discount" + + discount_item.qty = sale_item.qty + discount_item.unit_price = unit_price + discount_item.taxable_price = -price + discount_item.is_taxable = sale_item.is_taxable + discount_item.account_id = sale_item.account_id + + discount_item.price = -price + discount_item.save action_by = current_user.name remark = "Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} " - sale_audit = SaleAudit.record_audit_discount(sale_item.sale_id,sale.cashier_name, action_by,remark,"ITEMDISCOUNT" ) - + sale_audit = SaleAudit.record_audit_discount(discount_item.sale_id, sale.cashier_name, action_by, remark, "ITEMDISCOUNT" ) end end @@ -102,7 +120,6 @@ class Foodcourt::DiscountsController < BaseFoodcourtController end end - render :json => result.to_json end @@ -121,24 +138,31 @@ class Foodcourt::DiscountsController < BaseFoodcourtController table = nil end - if discount_items.length > 0 #destroy sale item for discount discount_items.each do |di| sale_item = SaleItem.find(di["id"]) - sale.total_amount = (sale.total_amount + sale_item.price.abs) + + discount_item = sale_item.discount_item + + next if discount_item.nil? + + sale.total_amount = (sale.total_amount + discount_item.price.abs) action_by = current_user.name if table.nil? - remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- No Table " + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{sale.receipt_no} | Table- No Table " else - remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} " + remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} " end sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEITEMDISCOUNT" ) - sale_item.destroy + discount_item.destroy end end + + # sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax; + # sale.save # Re-calc All Amount in Sale sale.compute_by_sale_items(sale.total_discount, nil, order_source) if table.nil? diff --git a/app/controllers/foodcourt/orders_controller.rb b/app/controllers/foodcourt/orders_controller.rb index 42d3288e..28c48e66 100755 --- a/app/controllers/foodcourt/orders_controller.rb +++ b/app/controllers/foodcourt/orders_controller.rb @@ -75,10 +75,10 @@ class Foodcourt::OrdersController < BaseFoodcourtController end end @current_shift = current_user.current_shift || ShiftSale.current_shift - status = ['completed', 'void'] + sale_status = ['completed', 'void'] - @pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, status) - @pending_completed = Sale.where('shift_sale_id = ? AND sale_status IN (?)', @current_shift.id, status) + @pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, sale_status) + @pending_completed = Sale.where('shift_sale_id = ? AND sale_status IN (?)', @current_shift.id, sale_status) @pending_orders = Sale.pending_order('food_court') @completed, @bookings = Sale.get_foodcourt_current_shift_orders diff --git a/app/controllers/foodcourt/sale_edit_controller.rb b/app/controllers/foodcourt/sale_edit_controller.rb index de59ec10..e312eab3 100755 --- a/app/controllers/foodcourt/sale_edit_controller.rb +++ b/app/controllers/foodcourt/sale_edit_controller.rb @@ -25,19 +25,24 @@ class Foodcourt::SaleEditController < BaseFoodcourtController saleitemObj.status = 'void' saleitemObj.remark = remark saleitemObj.save - @newsaleitem = SaleItem.new + @newsaleitem = saleitemObj.dup - # @newsaleitem.save + @newsaleitem.parent_id = saleitemObj.sale_item_id @newsaleitem.qty = saleitemObj.qty * -1 @newsaleitem.price = saleitemObj.price * -1 - @newsaleitem.is_taxable = 1 + @newsaleitem.is_taxable = saleitemObj.is_taxable @newsaleitem.taxable_price = saleitemObj.taxable_price * -1 @newsaleitem.product_name = saleitemObj.product_name + ' (VOID)' @newsaleitem.remark = remark @newsaleitem.save + if saleitemObj.discount_item + saleitemObj.discount_item.destroy + end + # re-calc tax saleObj = Sale.find(saleitemObj.sale_id) + # FOr Sale Audit action_by = current_user.name if access_code != "null" && current_user.role == "cashier" @@ -47,7 +52,6 @@ class Foodcourt::SaleEditController < BaseFoodcourtController sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" ) saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source) - ProductCommission.create_product_commission(@newsaleitem, saleitemObj) end def item_foc @@ -61,19 +65,27 @@ class Foodcourt::SaleEditController < BaseFoodcourtController saleitemObj.save @newsaleitem = saleitemObj.dup + @newsaleitem.parent_id = saleitemObj.sale_item_id @newsaleitem.qty = saleitemObj.qty * -1 @newsaleitem.unit_price = saleitemObj.unit_price * 1 + @newsaleitem.is_taxable = saleitemObj.is_taxable @newsaleitem.taxable_price = saleitemObj.taxable_price * -1 @newsaleitem.price = saleitemObj.price * -1 @newsaleitem.product_name = saleitemObj.product_name + ' (FOC)' @newsaleitem.remark = remark @newsaleitem.save + if saleitemObj.discount_item + saleitemObj.discount_item.destroy + end + # re-calc tax saleObj = Sale.find(saleitemObj.sale_id) order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id order = Order.find(order_id) + oqs_item = AssignedOrderItem.assigned_order_item_by_job(order_id) + ActionCable.server.broadcast "order_queue_station_channel",order: oqs_item action_by = current_user.name if access_code != "null" && current_user.role == "cashier" @@ -83,7 +95,6 @@ class Foodcourt::SaleEditController < BaseFoodcourtController sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" ) saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source) - ProductCommission.create_product_commission(@newsaleitem, saleitemObj) end def item_edit @@ -110,47 +121,47 @@ class Foodcourt::SaleEditController < BaseFoodcourtController sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMEDIT" ) # saleitemObj.remark = 'edit' - unless saleitemObj.product_name.include? 'UPDATED' - saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)' - end saleitemObj.save - sale.compute_by_sale_items(sale.total_discount, nil, order_source) + # re-calc tax + saleObj = Sale.find(saleitemObj.sale_id) - ProductCommission.edit_product_commission(saleitemObj) + sale.compute_by_sale_items(saleObj.total_discount, nil, order_source) end # make cancel void item def item_void_cancel - saleitemId = params[:sale_item_id] - access_code = params[:access_code] - order_source = params[:type] + Sale.transaction do + saleitemId = params[:sale_item_id] + access_code = params[:access_code] + order_source = params[:type] - saleitemObj = SaleItem.find(saleitemId) + saleitemObj = SaleItem.find(saleitemId) - saleObj = saleitemObj.sale + saleObj = saleitemObj.sale - saleObj.sale_items.where(product_code: saleitemObj.product_code) - .where(qty: saleitemObj.qty.abs) - .where(unit_price: saleitemObj.unit_price) - .where(status: saleitemObj.status).first.update(status: nil, remark: nil) - - saleitemObj.destroy - # re-calc tax - - order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id - order = Order.find(order_id) - - action_by = current_user.name - if access_code != "null" && current_user.role == "cashier" - action_by = Employee.find_by_emp_id(access_code).name + if saleitemObj.status == 'void' + saleitemObj.void_item.destroy + else saleitemObj.status == 'foc' + saleitemObj.foc_item.destroy end - remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}" - sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" ) - saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source) - ProductCommission.remove_product_commission(saleitemObj) + saleitemObj.update(status: nil, remark: nil) + # re-calc tax + + order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id + order = Order.find(order_id) + + action_by = current_user.name + if access_code != "null" && current_user.role == "cashier" + action_by = Employee.find_by_emp_id(access_code).name + end + remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}" + sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" ) + + saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source) + end end # remove all void items @@ -158,14 +169,13 @@ class Foodcourt::SaleEditController < BaseFoodcourtController sale_id = params[:sale_id] order_source = params[:type] saleObj = Sale.find(sale_id) - saleObj.sale_items.each do |item| + saleObj.sale_items.where(status: ['foc', 'void']).each do |item| if item.qty.to_i < 0 item.destroy else item.status = nil end item.save - ProductCommission.remove_product_commission(item) end saleObj.sale_items.reset # re-calc tax @@ -176,10 +186,7 @@ class Foodcourt::SaleEditController < BaseFoodcourtController sale_id = params[:sale_id] order_source = params[:type] saleObj = Sale.find(sale_id) - saleObj.compute_without_void(order_source) - saleObj.sale_items.each do |item| - ProductCommission.remove_product_commission(item) - end + saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source) end end diff --git a/app/controllers/origami/discounts_controller.rb b/app/controllers/origami/discounts_controller.rb index 19a9f087..db70ebf5 100755 --- a/app/controllers/origami/discounts_controller.rb +++ b/app/controllers/origami/discounts_controller.rb @@ -102,7 +102,7 @@ class Origami::DiscountsController < BaseOrigamiController sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" ) end - sale.compute_by_sale_items(overall_discount.to_f, nil,order_source) + sale.compute_by_sale_items(overall_discount.to_f, nil, order_source) if !table.nil? result = {:status=> "Success", :table_id => table_id, :table_type => table.type } else diff --git a/app/models/sale.rb b/app/models/sale.rb index 3696bcec..06b161dc 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -440,8 +440,7 @@ class Sale < ApplicationRecord end # Tax Re-Calculte - def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type=nil) - + def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type = nil) shop = Shop.current_shop #if tax is not apply create new record @@ -459,50 +458,31 @@ class Sale < ApplicationRecord if order_source.to_s == "emenu" order_source = "cashier" - elsif order_source.to_s == "app" - order_source = "online_order" end tax_profiles = unique_tax_profiles(order_source, self.customer_id) - if tax_type.nil? - #in previous >> if tax_profiles.count ==2 - if tax_profiles.count >= 2 - tax_type = "all" - elsif tax_profiles.count == 1 - if tax_profiles.name.downcase == "service charges" - tax_type = "Service Charges" - else - tax_type = "Commercial Tax" - end - elsif tax_profiles.count < 1 - tax_type = "no_tax" - end - end - # #Creat new tax records - if self.payment_status != 'foc' && tax_type.to_s == "all" + if self.payment_status != 'foc' tax_profiles.each do |tax| - sale_tax = SaleTax.new(:sale => self) + next if self.customer_id_before_last_save.nil? && !self.customer_id_changed? && tax_type.blank? && !taxes.map(&:tax_name).include?(tax.name) + next unless tax_type == 'all' || tax_type.blank? || tax_type.include?(tax.name) + sale_tax = self.sale_taxes.build sale_tax.tax_name = tax.name sale_tax.tax_rate = tax.rate - # substract , to give after discount total_tax = total_taxable - total_discount + #include or execulive - if tax.tax_type.to_s =="Net" - sale_tax.tax_payable_amount = tax.rate + if tax.inclusive + tax_incl_exec = "inclusive" + rate = tax.rate + divided_value = (100 + rate)/rate + sale_tax.tax_payable_amount = total_tax / divided_value else - if tax.inclusive - tax_incl_exec = "inclusive" - rate = tax.rate - divided_value = (100 + rate)/rate - sale_tax.tax_payable_amount = total_tax / divided_value - else - sale_tax.tax_payable_amount = total_tax * tax.rate / 100 - end + sale_tax.tax_payable_amount = total_tax * tax.rate / 100 end + sale_tax.inclusive = tax.inclusive - sale_tax.save if !tax.inclusive total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount @@ -513,67 +493,6 @@ class Sale < ApplicationRecord total_taxable = total_taxable + sale_tax.tax_payable_amount end end - elsif tax_type.to_s == "no_tax" - tax_profiles.each do |tax| - sale_tax = SaleTax.new(:sale => self) - sale_tax.tax_name = tax.name - sale_tax.tax_rate = 0 - sale_tax.tax_payable_amount = 0 - sale_tax.inclusive = tax.inclusive - sale_tax.save - end - elsif tax_type.to_s == "Commercial Tax" - tax_profiles.each do |tax| - if tax.name == tax_type.to_s - sale_tax = SaleTax.new(:sale => self) - sale_tax.tax_name = tax.name - sale_tax.tax_rate = tax.rate - # substract , to give after discount - total_tax = total_taxable - total_discount - #include or execulive - if tax.inclusive - tax_incl_exec = "inclusive" - rate = tax.rate - divided_value = (100 + rate)/rate - sale_tax.tax_payable_amount = total_tax / divided_value - else - sale_tax.tax_payable_amount = total_tax * tax.rate / 100 - total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount - end - #new taxable amount is standard rule for step by step - if shop.calc_tax_order - total_taxable = total_taxable + sale_tax.tax_payable_amount - end - sale_tax.inclusive = tax.inclusive - sale_tax.save - end - end - elsif tax_type.to_s == "Service Charges" - tax_profiles.each do |tax| - if tax.name == tax_type.to_s - sale_tax = SaleTax.new(:sale => self) - sale_tax.tax_name = tax.name - sale_tax.tax_rate = tax.rate - # substract , to give after discount - total_tax = total_taxable - total_discount - #include or execulive - if tax.inclusive - tax_incl_exec = "inclusive" - rate = tax.rate - divided_value = (100 + rate)/rate - sale_tax.tax_payable_amount = total_tax / divided_value - else - sale_tax.tax_payable_amount = total_tax * tax.rate / 100 - total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount - end - #new taxable amount is standard rule for step by step - if shop.calc_tax_order - total_taxable = total_taxable + sale_tax.tax_payable_amount - end - sale_tax.inclusive = tax.inclusive - sale_tax.save - end - end end self.tax_type = tax_incl_exec self.total_tax = total_tax_amount diff --git a/app/models/sale_item.rb b/app/models/sale_item.rb index 59706784..a4c9c001 100755 --- a/app/models/sale_item.rb +++ b/app/models/sale_item.rb @@ -16,6 +16,12 @@ class SaleItem < ApplicationRecord after_update :update_stock_journal after_save :update_stock_journal_set_item + has_one :discount_item, -> { where(status: 'Discount') }, class_name: 'SaleItem', foreign_key: 'parent_id' + has_one :foc_item, -> { where(status: 'foc') }, class_name: 'SaleItem', foreign_key: 'parent_id' + has_one :void_item, -> { where(status: 'void') }, class_name: 'SaleItem', foreign_key: 'parent_id' + + enum discount_type: { nett: 'nett', percentage: 'percentage' } + # Add Sale Items def self.add_sale_items(sale_items) sale_items.each do|saleitemObj| diff --git a/app/views/api/change_tax/index.json.jbuilder b/app/views/api/change_tax/index.json.jbuilder new file mode 100644 index 00000000..08bf292c --- /dev/null +++ b/app/views/api/change_tax/index.json.jbuilder @@ -0,0 +1 @@ +json.status true diff --git a/app/views/api/customers/get_customer_by_account.json.jbuilder b/app/views/api/customers/get_customer_by_account.json.jbuilder index bb993467..915d8c30 100644 --- a/app/views/api/customers/get_customer_by_account.json.jbuilder +++ b/app/views/api/customers/get_customer_by_account.json.jbuilder @@ -2,6 +2,7 @@ if @customer.present? json.status true else json.status false + json.message @message end json.data @customer diff --git a/app/views/api/discounts/create.json.jbuilder b/app/views/api/discounts/create.json.jbuilder new file mode 100644 index 00000000..08bf292c --- /dev/null +++ b/app/views/api/discounts/create.json.jbuilder @@ -0,0 +1 @@ +json.status true diff --git a/app/views/api/foodcourt/bills/create.json.jbuilder b/app/views/api/foodcourt/bills/create.json.jbuilder index 70ced95a..d81e0697 100644 --- a/app/views/api/foodcourt/bills/create.json.jbuilder +++ b/app/views/api/foodcourt/bills/create.json.jbuilder @@ -1,6 +1,7 @@ if @status == true #show invoice number and stuff json.status @status + json.booking_id @booking.booking_id json.sale_id @sale_data.sale_id sale = Sale.find(@sale_data.sale_id) diff --git a/app/views/api/sale_items/_sale_item.json.jbuilder b/app/views/api/sale_items/_sale_item.json.jbuilder index b552cd47..2aab7b82 100644 --- a/app/views/api/sale_items/_sale_item.json.jbuilder +++ b/app/views/api/sale_items/_sale_item.json.jbuilder @@ -1,8 +1,14 @@ if sale_item + json.sale_item_id sale_item.sale_item_id json.product_name sale_item.product_name json.product_alt_name sale_item.product_alt_name json.qty sale_item.qty json.unit_price sale_item.unit_price json.price sale_item.price json.taxable_price sale_item.taxable_price + json.status sale_item.status + if discount_item = sale_item.discount_item + json.discount discount_item.discount + json.discount_type discount_item.discount_type + end end diff --git a/app/views/api/sales/_sale.json.jbuilder b/app/views/api/sales/_sale.json.jbuilder index 501551fa..91707512 100644 --- a/app/views/api/sales/_sale.json.jbuilder +++ b/app/views/api/sales/_sale.json.jbuilder @@ -26,7 +26,7 @@ if sale json.shift_sale_id sale.shift_sale_id - json.sale_items sale.sale_items, partial: "api/sale_items/sale_item", as: :sale_item + json.sale_items sale.sale_items.includes(:discount_item).where(status: nil), partial: "api/sale_items/sale_item", as: :sale_item json.sale_taxes sale.sale_taxes, partial: "api/sale_taxes/sale_tax", as: :sale_tax end diff --git a/app/views/api/tax_profiles/index.json.jbuilder b/app/views/api/tax_profiles/index.json.jbuilder index e8edb04b..cceb9402 100644 --- a/app/views/api/tax_profiles/index.json.jbuilder +++ b/app/views/api/tax_profiles/index.json.jbuilder @@ -1,4 +1,2 @@ json.status true -json.data do - json.tax_profiles @tax_profiles, :name, :group_type, :rate, :inclusive, :order_by -end +json.data @tax_profiles, :name, :group_type, :rate, :inclusive, :order_by diff --git a/app/views/foodcourt/discounts/index.html.erb b/app/views/foodcourt/discounts/index.html.erb index 09cbb9d9..cee87565 100755 --- a/app/views/foodcourt/discounts/index.html.erb +++ b/app/views/foodcourt/discounts/index.html.erb @@ -1,833 +1,883 @@ -