From 71636b36db6bb444f230635851f63155d5633f07 Mon Sep 17 00:00:00 2001 From: Yan Date: Fri, 30 Jun 2017 19:05:13 +0630 Subject: [PATCH] add Re-compute all amoute for sale --- .../origami/discounts_controller.rb | 14 +++-- .../origami/other_charges_controller.rb | 18 +++--- app/controllers/origami/sales_controller.rb | 3 + app/models/sale.rb | 62 +++++++++++++++++++ app/models/sale_payment.rb | 8 +++ 5 files changed, 93 insertions(+), 12 deletions(-) diff --git a/app/controllers/origami/discounts_controller.rb b/app/controllers/origami/discounts_controller.rb index 6c76c27a..02a85f91 100644 --- a/app/controllers/origami/discounts_controller.rb +++ b/app/controllers/origami/discounts_controller.rb @@ -22,10 +22,10 @@ class Origami::DiscountsController < BaseOrigamiController sale = Sale.find(sale_id) table_id = sale.bookings[0].dining_facility_id table_type = DiningFacility.find(table_id).type - 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 + # 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| @@ -35,6 +35,7 @@ class Origami::DiscountsController < BaseOrigamiController 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.product_alt_name = "" sale_item.remark = "Discount" sale_item.qty = 1 @@ -45,7 +46,10 @@ class Origami::DiscountsController < BaseOrigamiController sale_item.price = di["price"] sale_item.save end - end + end + + # Re-calc All Amount in Sale + sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f) end dining = {:table_id => table_id, :table_type => table_type } diff --git a/app/controllers/origami/other_charges_controller.rb b/app/controllers/origami/other_charges_controller.rb index 22a4fb2c..a23ebd16 100644 --- a/app/controllers/origami/other_charges_controller.rb +++ b/app/controllers/origami/other_charges_controller.rb @@ -16,10 +16,11 @@ class Origami::OtherChargesController < BaseOrigamiController if Sale.exists?(sale_id) sale = Sale.find(sale_id) table_id = sale.bookings[0].dining_facility_id - table_type = DiningFacility.find(table_id).type - sale.total_amount = sub_total.to_f - sale.grand_total = sub_total.to_f + sale.total_tax; - sale.save + table_type = DiningFacility.find(table_id).type + + # sale.total_amount = sub_total.to_f + # sale.grand_total = sub_total.to_f + sale.total_tax; + # sale.save if other_charges_items.length > 0 #save sale item for discount other_charges_items.each do |di| @@ -34,14 +35,17 @@ class Origami::OtherChargesController < BaseOrigamiController sale_item.qty = 1 sale_item.unit_price = di["price"] - sale_item.taxable_price = di["price"] + sale_item.taxable_price = 0 sale_item.is_taxable = 0 sale_item.price = di["price"] sale_item.save end - end - end + end + + # Re-calc All Amount in Sale + sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount) + end dining = {:table_id => table_id, :table_type => table_type } render :json => dining.to_json diff --git a/app/controllers/origami/sales_controller.rb b/app/controllers/origami/sales_controller.rb index e272c1ee..c397da0f 100644 --- a/app/controllers/origami/sales_controller.rb +++ b/app/controllers/origami/sales_controller.rb @@ -26,6 +26,9 @@ class Origami::SalesController < BaseOrigamiController order.order_items.each do |orer_item| saleobj.add_item (orer_item) end + + # Re-compute for add + saleobj.compute saleobj.save order.save booking.save diff --git a/app/models/sale.rb b/app/models/sale.rb index 6ab83279..0df2d81b 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -41,8 +41,10 @@ class Sale < ApplicationRecord end booking.sale_id = sale_id end + order = booking.booking_orders.take.order link_order_sale(order.id) + return status, sale_id end end @@ -207,6 +209,33 @@ class Sale < ApplicationRecord end + #compute - invoice total + def compute_by_sale_items(sale_id, sale_itemss, total_discount) + sale = Sale.find(sale_id) + sales_items = sale_itemss + + #Computation Fields + subtotal_price = 0 + total_taxable = 0 + rounding_adjustment = 0 + + sales_items.each do |item| + #compute each item and added to total + subtotal_price = subtotal_price + item.price + total_taxable = total_taxable + (item.taxable_price * item.qty) + end + + compute_tax(sale, total_taxable) + sale.total_amount = subtotal_price + sale.total_discount = total_discount + sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax + #compute rounding adjustment + # adjust_rounding + + sale.save! + + end + def compute_without_void sales_items = self.sale_items @@ -232,6 +261,39 @@ class Sale < ApplicationRecord self.save! end + + # Tax Re-Calculte + def compute_tax(sale, total_taxable) + #if tax is not apply create new record + SaleTax.where("sale_id='#{sale.sale_id}'").find_each do |existing_tax| + #delete existing and create new + existing_tax.delete + end + + total_tax_amount = 0 + #tax_profile - list by order_by + tax_profiles = TaxProfile.all.order("order_by asc") + + # #Creat new tax records + tax_profiles.each do |tax| + sale_tax = SaleTax.new(:sale => sale) + sale_tax.tax_name = tax.name + sale_tax.tax_rate = tax.rate + #include or execulive + # sale_tax.tax_payable_amount = total_taxable * tax.rate + sale_tax.tax_payable_amount = total_taxable * tax.rate / 100 + #new taxable amount + total_taxable = total_taxable + sale_tax.tax_payable_amount + + sale_tax.inclusive = tax.inclusive + sale_tax.save + + total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount + end + + sale.total_tax = total_tax_amount + end + # Tax Calculate def apply_tax(total_taxable) #if tax is not apply create new record diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index c78b6cd8..11b201d2 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -54,6 +54,14 @@ class SalePayment < ApplicationRecord remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{cash_amount} | Payment Status ->#{payment_status}" sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by) + # update complete order items in oqs + SaleOrder.where("sale_id = '#{ invoice.sale_id }'").find_each do |sodr| + AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi| + aoi.delivery_status = 1 + aoi.save + end + end + return true, self.save else #record an payment in sale-audit