#Description #total_revenue = sum of all sub-total from sales table #total_discounts = sum of all discount (overall) from sales tables #total_taxes = sum of all taxes from sales table (Service + Goverment Tax (commercial_taxes)) #grand_total = total_revenue - total_discounts + total_taxes #nett_sales = grand_total - commercial_taxes #cash_sales = cash payment total revenue #credit_sales = credit payment total revenue #others_sales = [Sum of each of other payment type --- mpu, jcb, visa,master, rebate, vochure] #commercial_taxes = Total Goverment tax due #cash_in = Payment receive #Cash_out = Payment issues for misc payments class ShiftSale < ApplicationRecord belongs_to :cashier_terminal belongs_to :employee, :foreign_key => 'employee_id' def self.current_shift today_date = DateTime.now.strftime("%Y-%m-%d") shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null").take return shift end def self.current_open_shift(current_user) #if current_user #find open shift where is open today and is not closed and login by current cashier #DATE(shift_started_at)=? and today_date = DateTime.now.strftime("%Y-%m-%d") shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and employee_id = #{current_user}").take return shift #end end def create(opening_balance,cashier_terminal, current_user) self.cashier_terminal_id = cashier_terminal self.shift_started_at = DateTime.now self.employee_id = current_user.id self.opening_balance = opening_balance self.save end def update(sale) saleobj = Sale.find_by_sale_id(sale) cash = saleobj.get_cash_amount credit = saleobj.get_credit_amount other_sales = saleobj.get_other_amount tax = saleobj.get_commerical_tax self.total_revenue = self.total_revenue.to_f + saleobj.total_amount.to_f self.total_discounts = self.total_discounts + saleobj.total_discount self.total_taxes = self.total_taxes + saleobj.total_tax self.grand_total = self.grand_total + saleobj.grand_total self.cash_sales = self.cash_sales.to_f + cash.to_f self.credit_sales = self.credit_sales.to_i + credit.to_f self.other_sales = self.other_sales.to_i + other_sales.to_f self.nett_sales = self.nett_sales + saleobj.total_amount.to_f #self.grand_total.to_i - self.commercial_taxes self.commercial_taxes = self.commercial_taxes.to_i + tax.to_f self.total_rounding = self.total_rounding + saleobj.rounding_adjustment self.total_receipt = self.total_receipt + 1 self.save end # Calculate by type and update def calculate(sale, type) saleobj = Sale.find_by_sale_id(sale) cash = saleobj.get_cash_amount credit = saleobj.get_credit_amount other_sales = saleobj.get_other_amount tax = saleobj.get_commerical_tax if type == "void" self.total_revenue = self.total_revenue.to_f - saleobj.total_amount.to_f self.total_discounts = self.total_discounts - saleobj.total_discount self.total_taxes = self.total_taxes - saleobj.total_tax self.grand_total = self.grand_total - saleobj.grand_total self.cash_sales = self.cash_sales.to_f - cash.to_f self.credit_sales = self.credit_sales.to_i - credit.to_f self.other_sales = self.other_sales.to_i - other_sales.to_f self.nett_sales = self.nett_sales - saleobj.total_amount.to_f #self.grand_total.to_i - self.commercial_taxes self.commercial_taxes = self.commercial_taxes.to_i - tax.to_f self.total_rounding = self.total_rounding - saleobj.rounding_adjustment self.total_void = self.total_void + saleobj.grand_total self.save end end def get_closing_balance(shift) shiftobj = ShiftSale.find(shift) closing_balance = shiftobj.grand_total + shiftobj.cash_in - shiftobj.cash_out + shiftobj.total_cash return closing_balance end def self.get_by_shift_other_payment(shift) other_payment = Sale.select("sale_payments.payment_method as name, SUM(case when (sale_payments.payment_method='mpu') then (sale_payments.payment_amount) else 0 end) as mpu_amount, SUM(case when (sale_payments.payment_method='visa') then (sale_payments.payment_amount) else 0 end) as visa_amount, SUM(case when (sale_payments.payment_method='master') then (sale_payments.payment_amount) else 0 end) as master_amount, SUM(case when (sale_payments.payment_method='jcb') then (sale_payments.payment_amount) else 0 end) as jcb_amount, SUM(case when (sale_payments.payment_method='paypar') then (sale_payments.payment_amount) else 0 end) as paypar_amount") .joins("join sale_payments on sale_payments.sale_id = sales.sale_id") .where("sales.shift_sale_id =? and sale_status = 'completed' and sale_payments.payment_amount != 0 ", shift.id) end def self.calculate_total_price_by_accounts(shift,type) query = Sale.select("acc.title as account_name," + "SUM(case when (acc.id=i.account_id) then (i.price) else 0 end) as total_price") query = query.joins("JOIN sale_items i ON i.sale_id = sales.sale_id "+ "JOIN accounts acc ON acc.id = i.account_id" + " JOIN shift_sales sh ON sh.`id` = sales.shift_sale_id") if type == 'discount' query = query.where("sales.shift_sale_id =? and sale_status = 'completed' and i.is_taxable = false and i.remark = 'Discount'", shift.id) .group("acc.title").order("acc.id") else query = query.where("sales.shift_sale_id =? and sale_status = 'completed'", shift.id) .group("acc.title").order("acc.id") end end end